问题非常simple
,但我在实现方面遇到了麻烦。
当前表格如下:
ID Value
A 1
A 2
A 3
B 1
B 2
C 1
我需要这样:
ID Value1 Value2 Value3 Value...
A 1 2 3 NULL
B 1 2 NULL NULL
C 1 NULL NULL NULL
答案 0 :(得分:1)
如果值列是已知的\合理设置范围,即1-5,则可以执行以下操作:
Select ID,
MAX(CASE WHEN Value = 1 Then 1 Else Null End) as Value1,
MAX(CASE WHEN Value = 2 Then 2 Else Null End) as Value2,
MAX(CASE WHEN Value = 3 Then 3 Else Null End) as Value3,
MAX(CASE WHEN Value = 4 Then 4 Else Null End) as Value4,
MAX(CASE WHEN Value = 5 Then 5 Else Null End) as Value5
From Table
Group By ID
如果您不知道开头的列数,即它们是动态的,那么您将必须编写动态的sql pivot。有很多堆栈示例显示:
答案 1 :(得分:0)
好的,在你的帮助和朋友的帮助下,我解决了这个问题。
Select ROW_NUMBER()
OVER (PARTITION BY Field1
ORDER BY Field1)
AS order_num, Field1, Value
into #tab1
from Source_Table
Order by Field1
Select *
from #tab1
PIVOT
(Max(Value)
FOR order_num IN ([1], [2], [3], [4], [5])) AS PVT
drop table #tab1
我仍然必须完全理解它是如何工作的,但它确实有效。我希望它也可以帮助其他人。