トップページに戻る    次のmodel句のサンプルへ    前のmodel句のサンプルへ

model句05 pivotをあえてmodel句で

SQLパズル

modelPivot
ID  seq  Val
--  ---  -----
10  01   AAAAA
10  02   BBBBB
10  03   CCCCC
20  01   DDDDD
20  02   EEEEE

下記のpivotを、あえてmodel句を使って行う。

出力結果
ID  Val01  Val02  Val03
--  -----  -----  -----
10  AAAAA  BBBBB  CCCCC
20  DDDDD  EEEEE  null


データ作成スクリプト

create table modelPivot(ID,seq,Val) as
select 10,'01','AAAAA' from dual union all
select 10,'02','BBBBB' from dual union all
select 10,'03','CCCCC' from dual union all
select 20,'01','DDDDD' from dual union all
select 20,'02','EEEEE' from dual;


SQL

--■■■model句を使う方法■■■
select ID,Val01,Val02,Val03
  from modelPivot
 model return updated rows
 PARTITION BY (ID)
 DIMENSION BY (seq)
 measures(Val as Val01,Val as Val02,Val as Val03)
 rules(Val01['01'] = Val01['01'],
       Val02['01'] = Val02['02'],
       Val03['01'] = Val03['03'])
order by ID;

--■■■一般的な方法■■■
select ID,
max(decode(seq,'01',Val)) as Val01,
max(decode(seq,'02',Val)) as Val02,
max(decode(seq,'03',Val)) as Val03
  from modelPivot
group by ID
order by ID;


解説

model句でのpartition byの使い方の、いいサンプルだと思います。