ピボットを使用して列を列に変換したい。カラムが2つしかない場合は、それを行うことができます。テーブルに2つ以上のカラムがある場合、ピボットできるのでしょうか?例えば2列以上の列に行を変換するSQL Server
:
C1 C2 C3
________________________
A 10 1000
B 20 1000
C 30 1500
予想される出力:
A B C
10 20 30
1000 1000 1500
ピボットを使用して列を列に変換したい。カラムが2つしかない場合は、それを行うことができます。テーブルに2つ以上のカラムがある場合、ピボットできるのでしょうか?例えば2列以上の列に行を変換するSQL Server
:
C1 C2 C3
________________________
A 10 1000
B 20 1000
C 30 1500
予想される出力:
A B C
10 20 30
1000 1000 1500
これは、私もあなたの代わりに、複雑なCTEの
WITH cte
AS (SELECT Max(a) a,
Max(b) b,
Max(c) c
FROM (SELECT *
FROM #Table1)a
PIVOT (Avg(c2)
FOR c1 IN (a,
b,
c)) AS c),
c2
AS (SELECT Max(a) a,
Max(b) b,
Max(c) c
FROM (SELECT *
FROM #Table1)a
PIVOT (Avg(c3)
FOR c1 IN (a,
b,
c)) AS c3) SELECT *
FROM cte
UNION ALL
SELECT *
FROM c2
を使用しての1つのピボットで試すことができた一つの方法ですPIVOTとテーブル値コンストラクタを使用する簡単な方法はここにあります
のCREATE TABLE myTable
([C1] varchar(1), [C2] int, [C3] int)
;
INSERT INTO myTable
([C1], [C2], [C3])
VALUES
('A', 10, 1000),
('B', 20, 1000),
('C', 30, 1500)
;
SELECT [A],[B],[C]
FROM (
SELECT ca.*
FROM myTable mt
CROSS APPLY (VALUES(mt.C1, 1, mt.C2),(mt.C1, 2, mt.C3)) ca(col, rn, val)
) t
PIVOT (
MAX(val)
FOR col IN ([A],[B],[C])
) p
クロス列ごとに新しい行を作成する適用(C2、C3)はcol
PIVOTを組み合わせないように(Aは、B、C)rn
の値を分離するだけRowNumber関数値であり、C1の値です。それらを選び、ちょうどMAXを選び、val
はC2とC3の値だけです
https://blogs.msdn.microsoft.com/kenobonn/2009/03/22/pivot-on-two-or-more-fields- in-SQL-server / –