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

5-27 和集合を作成してグループ化

SQLパズル

テーブルA
伝票番号   コードA  コードB  数量
--------  --------  --------  ----
0001        A01      B01      10
0002        A01      B01      20
0003        A02      B02      30
0004        A02      B02      40

テーブルB
伝票番号  コードA  数量
--------  -------  ----
0001       A01      50
0002       A01      60

テーブルAを、コードA、コードBで集計
テーブルBを、コードAで集計(テーブルBにはコードBがないのでダミーでB03とする)
して出力する。

出力結果
コードA  コードB  合計数量
-------   -------  --------
A01         B01         30
A02         B02         70
A01         B03        110


データ作成スクリプト

create Table テーブルA(
伝票番号 char(4),
コードA char(3),
コードB char(3),
数量     number(2));

create Table テーブルB(
伝票番号 char(4),
コードA char(3),
数量     number(2));

insert into テーブルA(伝票番号,コードA,コードB,数量) values('0001','A01','B01',10);
insert into テーブルA(伝票番号,コードA,コードB,数量) values('0002','A01','B01',20);
insert into テーブルA(伝票番号,コードA,コードB,数量) values('0003','A02','B02',30);
insert into テーブルA(伝票番号,コードA,コードB,数量) values('0004','A02','B02',40);
insert into テーブルB(伝票番号,コードA,数量) values('0001','A01',50);
insert into テーブルB(伝票番号,コードA,数量) values('0002','A01',60);
commit;


SQL

select コードA,コードB,sum(数量) as 合計数量
from (select コードA,コードB,数量 from テーブルA
      union all select コードA,'B03',数量 from テーブルB)
group by コードA,コードB
order by コードB,コードA;


解説

インラインビュー内で和集合を作成して、グループ化してます。