2016-05-16 38 views
0

表名int_table。列是col_name, col_value沒有彙總SQL Server數據透視表

col_name col_value 
---------------------- 
A   aa 
B   bb 
C   cc 
D   dd 
D   ddd 
E   eee 

我需要輸出這樣的

A  B   C   D  E 
--------------------------------------------- 
aa  bb   cc   dd  eee 
           ddd  

它的採樣值。我的桌子上有超過30個這樣的行。

這是我的嘗試:

select * 
from int_table 
pivot (max(col_value) 
     for col_name in (A, B, C, D, E)) as tt 

與聚合功能它顯示一個錯誤。

如何使用pivot獲得此解決方案?

我使用SQL Server 2012的

回答

3

試試這個:

select A,B,C,D,E   
from (
    select col_name, col_value, 
      row_number() over (partition by col_name order by col_value) as rn 
    from int_table 
) as src 
pivot (max(col_value) for col_name in (A,B,C,D,E)) as pvt 

這裏的技巧是使用由ROW_NUMBER窗函數生成的計算列,以具有相同col_name值的記錄區分。

Demo here

+1

+1,*注爲OP *:讓空值,而不是'NULLS'你可以在以下使用'COALESCE':'選擇COALESCE(A, '')AS A, \t COALESCE (B, '')AS B, \t COALESCE(C, '')AS C, \t COALESCE(d, '')AS d, \t COALESCE(E, '')爲E 從(... .' –