T個人テーブル T受講テーブル
個人Code 講座Code 個人Code 受講時間 講座Code 得点
-------- -------- -------- ---------------- -------- ----
1 00001 1 2004/07/06 09:00 00001 50
1 00002 2 2004/07/06 09:30 00002 75
1 00003 2 2004/07/06 10:30 00003 100
2 00001 2 2004/07/07 09:30 00002 100
2 00002
2 00003 T講座テーブル
3 00001 講座Code 講座名
3 00002 -------- ------
4 00003 00001 国語
00002 英語
00003 数学
一回でも受講した人の、
全ての講座の受講履歴を出力する
出力結果
個人CODE 授業名 受講回数 受講時間 得点
-------- ------ -------- ---------------- ----
1 国語 1 2004/07/06 09:00 50
1 英語 0 null null
1 数学 0 null null
2 国語 0 null null
2 英語 1 2004/07/06 09:30 75
2 英語 2 2004/07/07 09:30 100
2 数学 1 2004/07/06 10:30 100
create table T個人(
個人Code number(1),
講座Code char(5));
insert into T個人 values(1,'00001');
insert into T個人 values(1,'00002');
insert into T個人 values(1,'00003');
insert into T個人 values(2,'00001');
insert into T個人 values(2,'00002');
insert into T個人 values(2,'00003');
insert into T個人 values(3,'00001');
insert into T個人 values(3,'00002');
insert into T個人 values(4,'00003');
create table T講座(
講座Code char(5),
講座名 char(4));
insert into T講座 values('00001','国語');
insert into T講座 values('00002','英語');
insert into T講座 values('00003','数学');
create table T受講(
個人Code number(1),
受講時間 date,
講座Code char(5),
得点 number(3));
insert into T受講 values(1,TO_DATE('2004/07/06 09:00','yyyy/mm/dd hh24:mi'),'00001', 50);
insert into T受講 values(2,TO_DATE('2004/07/06 09:30','yyyy/mm/dd hh24:mi'),'00002', 75);
insert into T受講 values(2,TO_DATE('2004/07/06 10:30','yyyy/mm/dd hh24:mi'),'00003',100);
insert into T受講 values(2,TO_DATE('2004/07/07 09:30','yyyy/mm/dd hh24:mi'),'00002',100);
commit;
select a.個人Code,
(select b.講座名
from T講座 b
where a.講座Code = b.講座Code) as 授業名,
count(c.受講時間)
over(partition by a.個人Code,a.講座Code order by c.受講時間) as 受講回数,
to_char(c.受講時間,'yyyy/mm/dd hh24:mi') as 受講時間,c.得点
from T個人 a,T受講 c
where a.個人Code = c.個人Code(+)
and a.講座Code = c.講座Code(+)
and exists (select 1 from T受講 d
where d.個人Code = a.個人Code )
order by a.個人Code,a.講座Code,c.受講時間;
count関数を使って、null以外の件数を取得してます