在下面的示例数据中,我想使用UDF将行拆分为列。
CREATE TABLE ##temp
([date] datetime,
category varchar(3),
amount money)
insert into ##temp values ('1/1/2012', 'ABC', 1000.00)
insert into ##temp values ('2/1/2012', 'DEF', 500.00)
insert into ##temp values ('2/1/2012', 'GHI', 800.00)
insert into ##temp values ('2/10/2012', 'DEF', 700.00)
insert into ##temp values ('3/1/2012', 'ABC', 1100.00);
我在下面创建函数
CREATE FUNCTION dbo.Splitter(@Name NVARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @cols AS NVARCHAR(MAX)
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(@Name)
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
RETURN @cols
END
当前输出
CatSplit
[ABC]
[DEF]
[GHI]
[DEF]
[ABC]
我想要的是(预期输出)
CatSplit
[ABC],[DEF],[GHI],[DEF],[ABC]
答案 0 :(得分:3)
为什么在这里需要功能,而无需使用功能就可以做到:
SELECT STUFF((SELECT ',' + QUOTENAME(t.category )
from #temp t
FOR XML PATH(''), TYPE
).VALUE('.', 'NVARCHAR(MAX)'), 1, 1, ''
) AS CatSplit
编辑:如果您将其用作列名进行透视或其他操作,则可以定义一个变量并在代码中的任何地方使用它,而无需使用函数。
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT ',' + QUOTENAME(t.category )
FROM #temp t
FOR XML PATH(''), TYPE
).VALUE('.', 'NVARCHAR(MAX)'), 1, 1, ''
)