複数の列をピボットしようとしています。 SQL Server 2008を使用しています。これまでに試したのは次のとおりです。
CREATE TABLE #t ( id int, Rscd varchar(10),Accd varchar(10),position int)
INSERT INTO #t Values (10,'A','B',1)
INSERT INTO #t Values (10,'C','D',2)
Select id,[1],[2],[11],[12] FROM
(SELECT id, Rscd,Accd, position , position +10 as Aposition
From #t)
As query
PIVOT (MAX(Rscd )
FOR Position IN ([1],[2])) AS Pivot1
PIVOT (MAX(Accd )
FOR Aposition IN ([11],[12])) AS Pivot2
以下に示すのは、私が得ている結果です
id 1 2 11 12
10 NULL C NULL D
10 A NULL B NULL
しかし、私が達成しようとしている結果は、
id 1 2 11 12
10 A C B D
何か助け?私のコードの何が問題になっていますか。
最初に列のペアをアンピボットし、次にピボットします。基本的に、アンピボットプロセスは列のペア(rscd
、position
およびaccd
、aposition
)を行に変換し、ピボットを適用できます。コードは次のようになります。
select id, [1], [2], [11], [12]
from
(
select id, col, value
from #t
cross apply
(
select rscd, position union all
select Accd, position + 10
) c (value, col)
) d
pivot
(
max(value)
for col in ([1], [2], [11], [12])
) piv;
SQL Fiddle with Demo を参照してください
Select id,sum([1]),sum([2]),sum([11]),sum([12]) FROM
(SELECT id, Rscd,Accd, position , position +10 as Aposition
From #t)
As query
PIVOT (MAX(Rscd )
FOR Position IN ([1],[2])) AS Pivot1
PIVOT (MAX(Accd )
FOR Aposition IN ([11],[12])) AS Pivot2
group by id