トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-38 曜日ごとの集計
SQLパズル
売上管理テーブル
商品コード 販売日 数量
--------- -------- ----
001 20050115 3
001 20050116 5
001 20050117 8
001 20050118 3
001 20050119 7
001 20050120 3
001 20050121 21
001 20050122 7
001 20050123 4
001 20050124 8
002 20050115 4
002 20050116 6
002 20050117 76
002 20050118 3
002 20050119 7
002 20050120 3
002 20050121 4
002 20050122 7
002 20050123 7
002 20050124 3
日付(月曜とは限らない)を引数として受け取り、
販売数量を以下の形式で出力する。
出力結果 (2005/01/20を引数として受け取った場合)
商品コード MON TUE WED THU FRI SAT SUN
---------- --- --- --- --- --- --- ---
001 8 3 7 3 21 7 4
002 76 3 7 3 4 7 7
データ作成スクリプト
create table 売上管理(
商品コード char(3),
販売日 char(8),
数量 number(3));
insert into 売上管理 values('001','20050115', 3);
insert into 売上管理 values('001','20050116', 5);
insert into 売上管理 values('001','20050117', 8);
insert into 売上管理 values('001','20050118', 3);
insert into 売上管理 values('001','20050119', 7);
insert into 売上管理 values('001','20050120', 3);
insert into 売上管理 values('001','20050121',21);
insert into 売上管理 values('001','20050122', 7);
insert into 売上管理 values('001','20050123', 4);
insert into 売上管理 values('001','20050124', 8);
insert into 売上管理 values('002','20050115', 4);
insert into 売上管理 values('002','20050116', 6);
insert into 売上管理 values('002','20050117',76);
insert into 売上管理 values('002','20050118', 3);
insert into 売上管理 values('002','20050119', 7);
insert into 売上管理 values('002','20050120', 3);
insert into 売上管理 values('002','20050121', 4);
insert into 売上管理 values('002','20050122', 7);
insert into 売上管理 values('002','20050123', 7);
insert into 売上管理 values('002','20050124', 3);
commit;
SQL
col MON for 99
col TUE for 99
col WED for 99
col THU for 99
col FRI for 99
col SAT for 99
col SUN for 99
select 商品コード,
sum(decode(to_char(to_date(販売日,'yyyymmdd'),'D'),'2',数量,0)) as MON,
sum(decode(to_char(to_date(販売日,'yyyymmdd'),'D'),'3',数量,0)) as TUE,
sum(decode(to_char(to_date(販売日,'yyyymmdd'),'D'),'4',数量,0)) as WED,
sum(decode(to_char(to_date(販売日,'yyyymmdd'),'D'),'5',数量,0)) as THU,
sum(decode(to_char(to_date(販売日,'yyyymmdd'),'D'),'6',数量,0)) as FRI,
sum(decode(to_char(to_date(販売日,'yyyymmdd'),'D'),'7',数量,0)) as SAT,
sum(decode(to_char(to_date(販売日,'yyyymmdd'),'D'),'1',数量,0)) as SUN
from 売上管理
where 販売日 between next_day(to_date('20050120','yyyymmdd'),'月')-7
and next_day(to_date('20050120','yyyymmdd'),'月')-1
group by 商品コード
order by 商品コード;
解説
between演算子とnext_day関数を組み合わせて、
販売日を範囲指定してます。
2005年カレンダー