2013-07-29 116 views
0

我想轉置(樞軸?)一個表。這是我目前的設置。
當前表:移調/樞軸行到列

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列)就足夠了。

回答

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

+3

+1只請注意,如果沒有附加列來排序,則每個列中值的位置可能與問題中所示的垂直方向不匹配。也歡迎staycations! :-) –

+0

謝謝!我在'row_number()處添加了'desc' .. order by ..' –

+0

謝謝Aaron的評論,不需要方向匹配(問題中的純巧合);只要選擇最大值5。 –