将行结果转置为单行

时间:2015-06-01 01:44:31

标签: sql sql-server-2008

也许我的例子太简单但我需要将结果从多行转换为单行中的多列。唯一的问题是返回的初始行数可能会有所不同,因此我的最终列数也可能不同。

例如,我从

返回结果
select name from pets

可能是:

我需要在一个单独的列中使用每个值:

Dog Cat Fish Rabbit

1 个答案:

答案 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;

DEMO