OracleのPIVOT句
SQLで横持ちにデータを集計したい時に、PIVOT句を使うと便利だったのでメモ。
【元ネタ】
Oracle 11g検証 隠れた新機能検証 その1|おら! オラ! Oracle|技術情報|株式会社インサイトテクノロジー
Oracle 11g R1新機能のPivotとUnPivot(1/5):CodeZine
OracleのSCOTTスキーマにある従業員テーブルで、JOB(仕事)とDNAME(部門)ごとに集計したい場合、下記のSQLで書ける。
select emp.deptno,dname
,sum(decode(job,'CLERK' ,sal,null)) "CLERK"
,sum(decode(job,'MANAGER' ,sal,null)) "MANAGER"
,sum(decode(job,'PRESIDENT',sal,null)) "PRESIDENT"
,sum(decode(job,'ANALYST' ,sal,null)) "ANALYST"
,sum(decode(job,'SALESMAN' ,sal,null)) "SALESMAN"
from emp,dept
where emp.deptno = dept.deptno
group by emp.deptno,dname
order by emp.deptno,dname;
PIVOT句を使うともっと簡単に書ける。
select * from ( select emp.deptno,dname,job,sal
from emp,dept
where emp.deptno = dept.deptno )
pivot ( sum(sal) for job
in ('CLERK','MANAGER','PRESIDENT','ANALYST','SALESMAN') )
order by deptno,dname;
PIVOT句を使う状況は、月別に横持ちでデータを表示したい時がある。
例えば、月別に部門ごとに売上金額を集計したい時など。
いわゆるクロス集計で使えると思う。
クロス集計されたデータをCSV出力すれば、Excelで簡単にグラフ化して、レポート用に整形できる。
チケット駆動開発ならば、ステータスとトラッカー・カテゴリ・バージョン・担当者のクロス集計の出力にも使えそうな機能だろう。
再帰SQLと同様にSQLは実は奥が深いのだ。
| 固定リンク
「プログラミング」カテゴリの記事
- Javaのモジュールシステムの考え方をまとめてみた(2022.10.21)
- Javaのモジュールシステムは複雑性をより増している(2022.09.10)
- Javaはなぜ関数型言語になろうとしているのか(2022.09.02)
- Javaのラムダ式の考え方(2022.08.10)
- Javaはオブジェクト指向言語ではなく関数型言語だった~「[増補改訂]関数プログラミング実践入門」はお勧めの本だ(2022.08.06)
「モデリング」カテゴリの記事
- リプレースとアーキテクチャモダナイゼーシヨンの違いの本質は何なのか?(2026.04.08)
- すり合わせの優位性は健在か?日本の製造業が直面するPLM活用とMBSEソフトウェア運用の理想と現実(2026.03.29)
- アーキテクチャモダナイゼーションにおけるAMETチームの役割と責任範囲は何か(2026.03.23)
- アーキテクチャモダナイゼーションとはそもそも何なのか?(2026.03.22)
- 自動車の組込ソフトウェア開発が難しい理由は3つある(2026.02.23)
「チケット駆動開発」カテゴリの記事
- マイクロマネジメントに陥ったチケット駆動開発の罠と再生戦略 #redminet(2026.04.26)
- 第29回東京Redmine勉強会の感想~今話題のテーマはJTC運用とAIによるプロマネ作業支援 #redminet(2025.11.09)
- RedmineJapan vol.4の感想part1~Redmine AI HeplerプラグインはRedmineのナレッジ活用を強化してくれる #RedmineJapan(2025.07.31)
- Jiraの機能はTracに似ている気がする #redmine(2025.06.01)
- Redmineは組織のナレッジ基盤として実現可能なのか~島津製作所の事例を読み解く #redmineT(2024.12.29)


コメント