我试图转置(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个列)就足够了。
答案 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;