トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
8-52 ピボット選択インサート
SQLパズル
InsData
ID Val1 Val2 Val3
-- ---- ---- ----
1 AAAA BBBB CCCC
2 DDDD EEEE null
3 FFFF null null
InsDataのデータをunpivotした結果セットを
ins1とins2にinsertする。
ins1には、inClude nullsなunpivot の結果をinsertし、
ins2には、exClude nullsなunpivot の結果をinsertする。
追加結果
ins1 ins2
ID Val ID Val
-- ---- -- ----
1 AAAA 1 AAAA
1 BBBB 1 BBBB
1 CCCC 1 CCCC
2 DDDD 2 DDDD
2 EEEE 2 EEEE
2 null 3 FFFF
3 FFFF
3 null
3 null
データ作成スクリプト
create table ins1(
ID number,
Val char(4));
create table ins2(
ID number,
Val char(4));
create table InsData(ID,Val1,Val2,Val3) as
select 1,'AAAA','BBBB','CCCC' from dual union
select 2,'DDDD','EEEE',null from dual union
select 3,'FFFF',null ,null from dual;
SQL
--■■■inClude nullsなunpivotライクなマルチテーブルインサート■■■
insert all
into ins1 values(ID,Val1)
into ins1 values(ID,Val2)
into ins1 values(ID,Val3)
select ID,Val1,Val2,Val3 from InsData;
--■■■exClude nullsなunpivotライクなマルチテーブルインサート■■■
insert all
when Val1 is not null then into ins2 values(ID,Val1)
when Val2 is not null then into ins2 values(ID,Val2)
when Val3 is not null then into ins2 values(ID,Val3)
select ID,Val1,Val2,Val3 from InsData;
解説