2017-08-11 7 views
0

私は、クエリ内のデータを旋回するようにしようとしている(SQL Server 2008のR2)と私は唯一の2列が旋回し必要がありますが、ピボット後に最大20個の列があるかもしれません。SQLのピボット機能

pid DiagnosisCode 
111 145.9 
111 17.43 
111 17.84 
111 196.2 
111 202.81 
112 204.21 
112 249.71 
112 263.8 
112 145.9 
113 269.8 
113 276.7 

私はこのようなルックスを取得しようとしている出力:ここまでの5つの診断コードと私のテストデータである

pid | code1 | code2 | code3 | code4 | code5 | code6 | code... | code20 
---------------------------------------------------------------------------- 
    111 145.9 17.43 17.84 196.2 202.81 NULL NULL  NULL 
    112 204.21 249.71 263.8 145.9 NULL NULL NULL  NULL 
    113 269.8 276.7 NULL NULL NULL NULL NULL  NULL 

私が持っているコードは次のとおりです。

select pid, DiagnosisCode 
from 
(select pid, DiagnosisCode, row_number() over(partition by pid order by pid) 
as seq 
from #temp 
) as src 
pivot 
(min(DiagnosisCode) 
for seq 
in (DiagnosisCode)) pvt 

何らかの理由で、この関数は私にはクリックされていません。MIN()集計関数が必要ですが、私の出力には必要ありません。 ROW_NUMBER()行を追加して、1つの投稿を読み込んだ後にシーケンスフィールドがあるようにしましたが、なぜその必要性がわかりません。私はここと他のサイトで、他のすべてのPivotの記事を読んできました。私はこれがこのサイトで何度も過ぎ去ってきたことは知っていますが、これをうまく動作させるために質問に必要なことを理解するのを助けることができたら、感謝します。

答えて

0

カラムを修正する必要があります。 SQL PivotテーブルがAccessと異なる場合、これは例です

declare @t as table (pid int , DiagnosisCode decimal(10,1)) 
insert @t select 111 , 145.9 
insert @t select 111 , 17.43 
insert @t select 111 , 17.84 
insert @t select 111 , 196.2 
insert @t select 111 , 202.81 
insert @t select 112 , 204.21 
insert @t select 112 , 249.71 
insert @t select 112 , 263.8 
insert @t select 112 , 145.9 
insert @t select 113 , 269.8 
insert @t select 113 , 276.7 


select * from @t 

select pid 
,code1 
,code2 
,code3 
,code4 
,code5 
,code6 
,code7 
,code8 
,code9 
,code10 
,code11 
,code12 
,code13 
,code14 
,code15 
,code16 
,code17 
,code18 
,code19 
,code20 
from 
(

select pid, DiagnosisCode, 'code' + cast(row_number() over(partition by pid order by pid) as varchar(2)) 
as seq 
from @t 
) as src 
pivot 
(min(DiagnosisCode) 
for seq 
in (
code1 
,code2 
,code3 
,code4 
,code5 
,code6 
,code7 
,code8 
,code9 
,code10 
,code11 
,code12 
,code13 
,code14 
,code15 
,code16 
,code17 
,code18 
,code19 
,code20 
)) pvt 



pid code1 code2 code3 code4 code5 code6 code7 .... code20 
---- ------ ------ ------- ------- ------ ------ ------  ------- 
111 145.9 17.4 17.8 196.2 202.8 NULL NULL  NULL 
112 204.2 249.7 263.8 145.9 NULL NULL NULL  NULL 
113 269.8 276.7 NULL NULL NULL NULL NULL  NULL 
+0

ありがとうございます。私は実際にFoxproのバックグラウンドから来たので、私は何かを理解していないときに元に戻すものを推測します。 – Tmartin