web-dev-qa-db-ja.com

複数の列でのSQLサーバーのピボット

複数の列をピボットしようとしています。 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

何か助け?私のコードの何が問題になっていますか。

8
user1005310

最初に列のペアをアンピボットし、次にピボットします。基本的に、アンピボットプロセスは列のペア(rscdpositionおよびaccdaposition)を行に変換し、ピボットを適用できます。コードは次のようになります。

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 を参照してください

11
Taryn
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
4
rimenri