再设计表的时候我们经常遇到这样的情况,字段的值为1,2,3,4
等字符隔开的情况,存的是数字,但是显示的时候是对应的类别,直接上图,清楚明了,
如何想得到
分两步完成,步骤如下:
第一步先创造 一个表值函数,将1,2,3,4 转化为
函数是从网上找来的,代码如下:
create FUNCTION [dbo].[fn_Split]( @String nvarchar (max), @Delimiter nvarchar (10) ) RETURNS @ValueTable TABLE ([Value] NVARCHAR(max),[id] int) BEGIN DECLARE @NextString nvarchar(max), @Pos int, @NextPos int, @CommaCheck nvarchar(1), @id int set @id=1 SET @NextString = '' SET @CommaCheck = right(@String,1) SET @String = @String + @Delimiter SET @Pos = CHARINDEX(@Delimiter,@String) SET @NextPos = 1 WHILE (@pos <> 0) BEGIN SET @NextString = SUBSTRING(@String,1,@Pos - 1) INSERT INTO @ValueTable ( [Value],[id]) VALUES (@NextString,@id) SET @String = SUBSTRING(@String,@pos +1,LEN(@String)) SET @NextPos = @Pos SET @pos = CHARINDEX(@Delimiter,@String) set @id = @id +1 END RETURN END GO
第二步 创建标量函数 ,这步比较重要,由于这些标量函数也不经常用到,总感觉能实现就是还没想好思路,也就是多行转一行的啦,
代码如下:
?
ALTER FUNCTION [dbo].[GetBiontionName](@nodeId varchar(64))
RETURNS varchar(64)
AS
BEGIN
declare @name varchar(64)
set @name=(select name+',' from GWT_Biont where cast(id as varchar) in (SELECT CAST(value AS INT) FROM dbo.fn_Split(@nodeId, ',')) for xml path('') )
return substring(@name,1,len(@name)-1)
END
GO
这样就大功搞成了
?