トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

3-24 月曜日から出力

SQLパズル

祝日テーブル
日
---------
2006/1/1
2006/2/11
2006/3/21
2006/4/29
2006/5/3
2006/5/4
2006/5/5
2006/9/23
2006/11/23
2006/12/23

祝日の曜日を重複を排除して、
月曜日から順に出力する

出力結果
祝日の曜日
----------
火曜日
水曜日
木曜日
金曜日
土曜日
日曜日


データ作成スクリプト

create table 祝日(日 date);

insert into 祝日 values(to_date('2006/1/1'  ,'fmyyyy/mm/dd'));
insert into 祝日 values(to_date('2006/2/11' ,'fmyyyy/mm/dd'));
insert into 祝日 values(to_date('2006/3/21' ,'fmyyyy/mm/dd'));
insert into 祝日 values(to_date('2006/4/29' ,'fmyyyy/mm/dd'));
insert into 祝日 values(to_date('2006/5/3'  ,'fmyyyy/mm/dd'));
insert into 祝日 values(to_date('2006/5/4'  ,'fmyyyy/mm/dd'));
insert into 祝日 values(to_date('2006/5/5'  ,'fmyyyy/mm/dd'));
insert into 祝日 values(to_date('2006/9/23' ,'fmyyyy/mm/dd'));
insert into 祝日 values(to_date('2006/11/23','fmyyyy/mm/dd'));
insert into 祝日 values(to_date('2006/12/23','fmyyyy/mm/dd'));
commit;


SQL

select 曜日1 as 祝日の曜日
from (select distinct to_char(日,'day') as 曜日1,
      nullif(to_char(日,'d'),'1') as 曜日2
        from 祝日)
order by 曜日2;


解説

to_char(日,'day')の結果と、
nullif(to_char(日,'d'),'1')の結果が、
1対1であることを使ってます