create Table テーブルA(
部門 char(3),
年月 char(6),
金額A number(2));
create Table テーブルB(
部門 char(3),
年月 char(6),
金額B number(2));
insert into テーブルA(部門,年月,金額A) values('AAA','200404',10);
insert into テーブルA(部門,年月,金額A) values('AAA','200405', 5);
insert into テーブルA(部門,年月,金額A) values('AAA','200406',15);
insert into テーブルA(部門,年月,金額A) values('AAA','200409',25);
insert into テーブルA(部門,年月,金額A) values('AAA','200412',30);
insert into テーブルA(部門,年月,金額A) values('CCC','200406', 5);
insert into テーブルB(部門,年月,金額B) values('AAA','200404', 5);
insert into テーブルB(部門,年月,金額B) values('AAA','200404',10);
insert into テーブルB(部門,年月,金額B) values('AAA','200405',20);
insert into テーブルB(部門,年月,金額B) values('AAA','200406',15);
insert into テーブルB(部門,年月,金額B) values('AAA','200409',40);
insert into テーブルB(部門,年月,金額B) values('AAA','200410', 5);
insert into テーブルB(部門,年月,金額B) values('AAA','200501',60);
insert into テーブルB(部門,年月,金額B) values('BBB','200404',20);
commit;
--■■■相関サブクエリを使う方法■■■
select a.部門,
(select sum(b.金額A) from テーブルA b
where b.部門 = a.部門
and b.年月='200404') as "2004/04(金額A)",
(select sum(b.金額B) from テーブルB b
where b.部門 = a.部門
and b.年月='200404') as "2004/04(金額B)",
(select sum(b.金額A) from テーブルA b
where b.部門 = a.部門
and b.年月 between '200404' and '200409') as "2004/04〜2004/09(金額A)",
(select sum(b.金額B) from テーブルB b
where b.部門 = a.部門
and b.年月 between '200404' and '200409') as "2004/04〜2004/09(金額B)"
from (select 部門 from テーブルA
union select 部門 from テーブルB) a
order by 部門;
--■■■sum関数とdecode関数とcase式を使う方法■■■
select 部門,
sum(decode(年月,'200404',金額A)) as "2004/04(金額A)",
sum(decode(年月,'200404',金額B)) as "2004/04(金額B)",
sum(case when 年月 between '200404' and '200409' then 金額A end) as "2004/04〜2004/09(金額A)",
sum(case when 年月 between '200404' and '200409' then 金額B end) as "2004/04〜2004/09(金額B)"
from (select 部門,年月,金額A,null as 金額B from テーブルA
union all
select 部門,年月,null,金額B from テーブルB)
group by 部門
order by 部門;