トップページに戻る    次の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関数の値で分岐させてます