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

model句12 (固定値での)Partitioned Outer Joinもどき

SQLパズル

tabテーブル
Code  Seq  Data
----  ---  ----
 001    1  a
 001    2  b
 001    3  c
 002    1  d
 002    3  e
 003    3  f
 004    2  g

ひとつのcodeに対して、必ず3レコード存在するように
以下の出力をする。

出力結果
Code  Seq  Data
----  ---  ----
 001    1  a
 001    2  b
 001    3  c
 002    1  d
 002    2  null
 002    3  e
 003    1  null
 003    2  null
 003    3  f
 004    1  null
 004    2  g
 004    3  null


データ作成スクリプト

create table tab(
code char(3),
seq  number(1),
data char(1));

insert into tab values('001',1,'a');
insert into tab values('001',2,'b');
insert into tab values('001',3,'c');
insert into tab values('002',1,'d');
insert into tab values('002',3,'e');
insert into tab values('003',3,'f');
insert into tab values('004',2,'g');
commit;


SQL

--■■■forを使わない方法■■■
select code,seq,data
  from tab
 model
 partition by (code)
 dimension by (seq)
 measures(data)
 rules(data[1] = data[1],
       data[2] = data[2],
       data[3] = data[3])
order by code,seq;

--■■■forを使う方法■■■
select code,seq,data
  from tab
 model
 partition by (code)
 dimension by (seq)
 measures(data)
 rules(data[for seq from 1 to 3 INCREMENT 1] = data[cv()])
order by code,seq;


解説

(固定値での)Partitioned Outer Joinであれば、model句で代用してもいいでしょう。

10-109 ANSI構文でクロスジョイン
model句17 Partitioned Outer Joinもどき