こんな感じで出来ます。
データソースのテーブルとしては、
<uriage_t> 商品コード | 売上月 | 売上金額 ------------------------------------------- A | 1月 | \1,000 A | 2月 | \2,000 A | 3月 | \3,000 B | 1月 | \4,000 C | 3月 | \5,000
で、ピボットテーブルを作成するSQLは、
SELECT * FROM uriage_t PIVOT ( SUM(売上金額) FOR 売上月 IN ([1月], [2月], [3月]) )
すると、こんな感じに集計されます。
商品コード | 1月 | 2月 | 3月 ------------------------------------------- A | \1,000 | \2,000 | \3,000 B | \4,000 | <NULL> | <NULL> C | <NULL> | <NULL> | \5,000
SQLのポイントとしては、次の通り
- 集計対象のテーブルにくっつけてPIVOT句を書く
- SUM指定された項目を集計する
- FORで指定された値が列として出力
- 集計対象のテーブルの項目の内、SUMとFORで指定された列以外で、GROUP BY が自動的にかかる
一覧表をバーンと出すのに便利なんですが、それでも足りない点がいくつかあります。
- 集計列は固定で指定しなければいけない(動的SQLを使えば一応できる)
- 集計の軸は1つのみ(例えば、金額と数両を同時に集計できない)
とはいえ、これが使えると『SQLでデータを取得して、主キーが同じ値の間ループして、該当する列に値を入れていく』とか言うめんどっちいことが要らなくなります。
便利なんで、ついつい使っちゃうんですが、単発のレポートを作るんだったら
Excelのピボットの方が10倍簡単なのが悲しいところですな。
0 件のコメント:
コメントを投稿