Top / TIPS / 縦展開のテーブルを横展開にする

次のように、縦展開されたテーブル(売上金額テーブル) があります。

コード名称売上金額
00001名称00001011000
00001名称00001021100
00001名称0000103150
00001名称00001042000
00002名称0000201800
00002名称0000202900
00002名称00002031000
00002名称000020420

1年分の売上を月ごとに見たい場合、次のようなテーブルになっていると見やすいですね。
# 長くなるので、1月から4月までとします。

コード名称1月2月3月4月
00001名称00001100011001502000
00002名称00002800900100020

このようにテーブルを扱うときは、DECODE を使うとよいでしょう。

このような集計を、クロス集計といいます。

SELECT
    コード
,   名称
,   SUM(DECODE(月, '01', 売上金額, 0)) "1月"
,   SUM(DECODE(月, '02', 売上金額, 0)) "2月"
,   SUM(DECODE(月, '03', 売上金額, 0)) "3月"
,   SUM(DECODE(月, '04', 売上金額, 0)) "4月"
,   SUM(DECODE(月, '05', 売上金額, 0)) "5月"
,   SUM(DECODE(月, '06', 売上金額, 0)) "6月"
,   SUM(DECODE(月, '07', 売上金額, 0)) "7月"
,   SUM(DECODE(月, '08', 売上金額, 0)) "8月"
,   SUM(DECODE(月, '09', 売上金額, 0)) "9月"
,   SUM(DECODE(月, '10', 売上金額, 0)) "10月"
,   SUM(DECODE(月, '11', 売上金額, 0)) "11月"
,   SUM(DECODE(月, '12', 売上金額, 0)) "12月"
FROM
    売上金額テーブル
GROUP BY
    コード
,   名称

その後

11G より PIVOT が使えるようです。

SELECT
    *
FROM
    売上金額テーブル    
PIVOT
(
    SUM(売上金額) 
    FOR 月 IN (
                '01' AS "1月"
            ,   '02' AS "2月"
            ,   '03' AS "3月"
            ,   '04' AS "4月"
            ,   '05' AS "5月"
            ,   '06' AS "6月"
            ,   '07' AS "7月"
            ,   '08' AS "8月"
            ,   '09' AS "9月"
            ,   '10' AS "10月"
            ,   '11' AS "11月"
            ,   '12' AS "12月"
            )
)



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2019-07-31 (水) 16:09:52 (18d)