トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-77 結合して、同上をnullに変換
SQLパズル
table1テーブル
EmpID Email
----- -----------
00001 aa@test.com
00002 bb@test.com
table2テーブル
EmpID Value1 Value2
----- ------ ------
00001 AB 123
00001 CD 345
00001 DF 455
00002 AA 089
00002 BB 999
下記の出力をする
出力結果
EmpID Email Value1 Value2
----- ----------- ------ ------
00001 aa@test.com AB 123
null null CD 345
null null DF 455
00002 bb@test.com AA 089
null null BB 999
データ作成スクリプト
create table table1(
EmpID char(5),
Email char(11));
insert into table1 values('00001','aa@test.com');
insert into table1 values('00002','bb@test.com');
create table table2(
EmpID char(5),
Value1 char(2),
Value2 char(3));
insert into table2 values('00001','AB','123');
insert into table2 values('00001','CD','345');
insert into table2 values('00001','DF','455');
insert into table2 values('00002','AA','089');
insert into table2 values('00002','BB','999');
commit;
SQL
select
case Row_Number() over(partition by a.EmpID order by b.Value1,b.Value2)
when 1 then a.EmpID end as EmpID,
case Row_Number() over(partition by a.EmpID order by b.Value1,b.Value2)
when 1 then a.Email end as Email,
b.Value1,b.Value2
from table1 a,table2 b
where a.EmpID = b.EmpID
order by a.EmpID,b.Value1,b.Value2;
解説
case式とRow_Number関数を組み合わせてます