freks blog

Oracle Pivotの使い方

Oracle Pivot を使った SQL を読むたびに、どうなるんだっけ..となってしまってたのでここにまとめます

1 行でいうと、縦表示を横表示に変えるものです
使い方を見てみます

まずはサンプルのテーブル

create table PivotSample(
ID   number(1),
Year number(4),
Val  number(3),
primary key (ID,Year));

データは

select * from PivotSample;
ID Year Val
1 2010 1
1 2011 2
1 2012 6
2 2010 70
2 2011 80
3 2012 90
4 2010 300
4 2012 500

こんな感じで用意されてるとして

Pivot の例は

select *
  from PivotSample
 Pivot (max(Val) for Year in(2010 as Agg2010,
                             2011 as Agg2011,
                             2012 as Agg2012))
order by ID;
ID Agg2010 Agg2011 Agg2012
1 1 2 6
2 70 80 null
3 null null 90
4 300 null 500

ポイントとしては、Pivot() に出てこない列が暗黙の GROUP BY のキーになるところ
つまり、ここだと ID 列で GROUP BY されてます

Pivot 内の in の項目が横表示になります
値は、max(Val)が表示されます

出典: 図でイメージする Oracle Database の SQL 全集 第 8 回 Pivot と UnPivot