10

複数の列でピボットしようとしています。私はSQLサーバー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

助けはありますか?私のコードで何が間違っていますか。

4

3 に答える 3

14

最初に列をペアにアンピボットしてから、それらをピボットします。基本的に、アンピボット プロセスは、列のペア ( 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 を参照してください

于 2013-09-06T16:14:52.023 に答える
4
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
于 2014-01-28T13:10:54.340 に答える
-3

ID列を使用しないでください。派生テーブルを使用して ID 以外のすべての列を取得し、PIVOT テーブルを使用します。

于 2013-11-09T10:34:49.180 に答える