トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-294 IDごとに、場合分けで出力行を制御
SQLパズル
priceT
ID price
---- -----
4720 X
4720 $555
4737 X
4737 X
4737 $999
4782 X
4782 $111
4782 $888
9606 X
9606 X
9613 X
9668 $333
IDごとで、
Xだけなら、Xを1行にまとめて表示し、
X以外があれば、X以外を表示する。
出力結果
ID price
---- -------
4720 $555
4737 $999
4782 $111
4782 $888
9606 X
9613 X
9668 $333
データ作成スクリプト
create table priceT(ID,price) as
select 4720,'X' from dual union all
select 4720,'$555' from dual union all
select 4737,'X' from dual union all
select 4737,'X' from dual union all
select 4737,'$999' from dual union all
select 4782,'X' from dual union all
select 4782,'$111' from dual union all
select 4782,'$888' from dual union all
select 9606,'X' from dual union all
select 9606,'X' from dual union all
select 9613,'X' from dual union all
select 9668,'$333' from dual;
SQL
--■■■nullif関数を使う方法■■■
select ID,price
from (select ID,price,
Row_Number() over(partition by ID order by nullif(price,'X')) as rn
from priceT)
where price != 'X' or rn = 1
order by ID,price;
--■■■decode関数を使う方法■■■
select ID,price
from (select ID,price,
Row_Number() over(partition by ID order by decode(price,'X',1,0)) as rn
from priceT)
where price != 'X' or rn = 1
order by ID,price;
解説
下記の3通りに場合分けして、検証してます。
・Xだけの場合
・XとX以外が存在する場合
・全てX以外の場合