【Oracle】【PL/SQL】レコードの縦横変換
レコードの縦横変換
やりたいこと
下記の表のように発注ごとに商品の売り上げ金額を持っているような場合に、発注IDごとの集計をするために縦横変換を行いたい。
元データ
発注ID | 商品 | 金額 |
---|---|---|
TK001 | コーヒー | 200 |
TK001 | 緑茶 | 300 |
TK001 | ほうじ茶 | 400 |
TK002 | コーヒー | 500 |
TK002 | ほうじ茶 | 600 |
縦横変換後
発注ID | コーヒー | 緑茶 | ほうじ茶 |
---|---|---|---|
TK001 | 200 | 300 | 400 |
TK002 | 500 | 0 | 600 |
サンプルコード
発注IDごとにデータをGROUP BY
を行い、その合計額を取ります。
合計額にする必要がない場合はSUM
をMAX
などに変え、1レコードのみ取得するなどの方法が取れます。
SELECT 発注ID,
SUM(CASE WHEN 商品 = 'コーヒー' THEN 金額 END) AS コーヒー,
SUM(CASE WHEN 商品 = '緑茶' THEN 金額 END) AS 緑茶,
SUM(CASE WHEN 商品 = 'ほうじ茶' THEN 金額 END) AS ほうじ茶
FROM 元データ
GROUP BY 発注ID
;