トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
9-33 count関数の値で分岐
SQLパズル
RolesTable
person roles
------ -----
Brown X
Jones O
Smith D
Smith O
White D
rolesがDかOのデータを出力するが、
両方のレコードを持つpersonは、2レコードをまとめて
rolesをBとして出力する
出力結果
person combined_role
------ -------------
Jones O
Smith B
White D
SQLパズル(日本語版)のパズル35 [仕事の兼務] を参考にさせていただきました
SQLパズル 第2版のパズル36 [1人2役] を参考にさせていただきました
データ作成スクリプト
create table RolesTable as
select 'Brown' as person,'X' as roles from dual
union select 'Jones','O' from dual
union select 'Smith','D' from dual
union select 'Smith','O' from dual
union select 'White','D' from dual;
SQL
select person,
decode(count(*),1,max(roles),'B') as combined_role
from RolesTable
where roles in('D','O')
group by person
order by person;
解説
count関数の値で分岐させてます