2016-05-16 16 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 
ここにトリックは同じ col_name値を持つレコードを区別するように、 ROW_NUMBER窓関数によって生成さ算出列を使用することです

Demo here

+1

1、* OP *のための注意:代わりに、あなたは以下に 'COALESCE'を使用することができNULLS''のブランク値を取得する: 'COALESCE(Aを、 '')を選択A、 \t COALESCE AS 'B AS、 \t COALESCE(C、(B' ')からE AS' D AS、 \t COALESCE(E、C AS ')、 \t COALESCE(D') '')(... 」 –

関連する問題