SELECTの結果を"複数列"行列変換する(PIVOT)
文書番号:20255
SELECT した結果一覧を"複数列"行列変換して取得するSQL。
サンプルデータは以下の通りです。
複数列を行列変換する場合、FOR ~ IN ()の中の指定で AS句による別名をつけるところがポイントです。サンプルデータは以下の通りです。
コード | 数量 | 金額 |
---|---|---|
0001 | 5 | 100 |
0001 | 15 | 150 |
0001 | 50 | 250 |
0002 | 1 | 50 |
0002 | 20 | 300 |
0003 | 20 | 250 |
0003 | 60 | 500 |
0003 | 20 | 160 |
返される列名は一定のルールで付けられますので「SELECT * ~」で取得してみるとわかります。
SELECT PVT.A01_数量
,PVT.A01_金額
,PVT.A02_数量
,PVT.A02_金額
,PVT.A03_数量
,PVT.A03_金額
FROM (
SELECT コード
,SUM(数量) AS 数量
,SUM(金額) AS 金額
FROM TAB_A
GROUP BY コード
)
PIVOT (
SUM(数量) AS 数量
,SUM(金額) AS 金額
FOR コード IN (
'0001' AS A01
,'0002' AS A02
,'0003' AS A03
)
) PVT
結果
A01_数量 | A01_金額 | A02_数量 | A02_金額 | A03_数量 | A03_金額 |
---|---|---|---|---|---|
70 | 500 | 21 | 350 | 100 | 910 |