也许我的例子太简单但我需要将结果从多行转换为单行中的多列。唯一的问题是返回的初始行数可能会有所不同,因此我的最终列数也可能不同。
例如,我从
返回结果select name from pets
可能是:
狗
猫
鱼
兔
我需要在一个单独的列中使用每个值:
Dog
Cat
Fish
Rabbit
答案 0 :(得分:1)
DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX)
-- First create list of columns that you need in end result
SET @columns = N''
SELECT @columns += N', ' + QUOTENAME(name)
FROM (select distinct name from pets) AS x
-- now create pivot statement as:
SET @sql = N'
SELECT ' + STUFF(@columns, 1, 2, '') + '
FROM
(
SELECT name
FROM pets
) AS j
PIVOT
(
max(name) FOR name IN ('
+ STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, '')
+ ')
) AS p;'
EXEC sp_executesql @sql;