CREATE
1create table 売上ロット 2( 3cd varchar2(10) 4,LOT varchar2(10) 5,最古売上月 varchar2(10) 6) 7; 8create table 売上トラン 9( 10cd varchar2(10) 11,売上額 number 12,売上日 varchar2(10) 13) 14;
INSERT
1insert into 売上ロット values('123','D1','2019/01/01'); 2insert into 売上ロット values('123','D2','2019/02/01'); 3insert into 売上ロット values('123','D3','2019/03/01'); 4insert into 売上トラン values('123',30,'2019/01/01'); 5insert into 売上トラン values('123',10,'2019/01/06'); 6insert into 売上トラン values('123',120,'2019/03/01'); 7commit;
売上ロット
CD LOT 最古売上月
-------+-------+-------
123 D1 2019/01/01
123 D2 2019/02/01
123 D3 2019/03/01
売上トラン
CD 売上額 売上日
-------+-------+-------
123 30 2019/01/01
123 10 2019/01/06
123 120 2019/03/01
上記2つのテーブルの情報から、下記のような情報を得たい
CD LOT 最古売月 売上金額
-------+-------+----------+-------
123 D1 2019/01 40
123 D2 2019/02 0
123 D3 2019/03 120
最古売上日間をSUMすればいいのですが、単純なSQLでは実現できないでしょうか。
plsqlでcursorに入れるという形であればできると思いますが、単一SQLで実現できる方法があれば
教えて頂けませんでしょうか。
下記のようなSQLを売上日を変えて、UNIONでつなげれば、もとまるとは思いますが
1920/01/01~2019/12/01をすべて求める必要があり、すべてパラメータを変えるのは難しい状態です。
SQL
1select t1.cd,t1.lot,SUBSTR(売上日,1,7)||'/01',sum(t2.売上額) from 売上ロット t1 2left join 売上トラン t2 3on t1.cd = t2.cd 4where 売上日 > = '2019/01/01' 5and 売上日 < '2019/02/01' 6group by t1.cd,t1.lot,SUBSTR(売上日,1,7)||'/01'
回答3件
あなたの回答
tips
プレビュー