将行转置/透视到列

时间:2013-07-29 18:22:17

标签: sql-server tsql pivot transpose

我试图转置(Pivot?)一张桌子。这是我目前的设置。
当前表:

ID | Value
1  | 10
1  | 11
1  | 12
1  | 13
1  | 14
2  | 123
3  | 13423
3  | 1134
3  | 1234

寻求以下结果:

ID | Value01 | Value 02 | Value 03 | Value 04 | Value 05
1  |  10     |  11      |   12     |   13     |  14
2  |  123
3  | 13423   | 1134     | 1234

目前我正在尝试使用PIVOT,但我不完全确定PIVOT如何没有“类别列”(例如几天或几个月)。我可以使用ID列吗?

SELECT ID, Value, [0], [1], [2], [3], [4] 
FROM (
      SELECT ID, Value FROM dbo.TABLE
) SourceTable 
PIVOT (
      VALUE FOR ID IN ([0], [1], [2], [3], [4])
) AS PivotTable

每个VALUE没有预设数量的ID。但是如果要求有一个已知的数字,那么5个值(因而是5个列)就足够了。

1 个答案:

答案 0 :(得分:3)

您当前的查询已关闭,您缺少所需的值作为新列名称。我的建议是使用row_number(),它将为每个id创建一个递增的值,然后您可以使用PIVOT函数为这些序列值中的每一个返回max(value)

SELECT ID, [0], [1], [2], [3], [4] 
FROM 
(
  SELECT ID, Value, 
    row_number() over(partition by id 
                        order by id) -1  seq
  FROM yourtable
) SourceTable 
PIVOT 
(
  max(VALUE)
  FOR seq IN ([0], [1], [2], [3], [4])
) AS PivotTable;

请参阅SQL Fiddle with Demo