17,086
社区成员
发帖
与我相关
我的任务
分享
mainTB(主表): id name sex
001 张三 男
002 李四 女
subTB(子表) mainTB_id subject grade
001 语文 80
001 数学 90
001 英语 95
002 语文 75
002 数学 70
SQL> select case when row_number()over(partition by a.id order by 1) <= 1 then a.id else null end "学号",
2 case when row_number()over(partition by a.id order by 1) <= 1 then a.name else null end "姓名" ,
3 case when row_number()over(partition by a.id order by 1) <= 1 then a.sex else null end "性别",
4 b.subject "科目",b.grade "成绩"
5 from maintb a, subtb b
6 where a.id = b.maintb_id
7 ;
学号 姓名 性别 科目 成绩
---- ---- ---- ---- ----------
001 张三 男 语文 80
数学 90
英语 95
002 李四 女 语文 75
数学 70
SQL> create table maintb as
2 (
3 select '001' id, '张三' name, '男' sex from dual union all
4 select '002' id, '李四' name, '女' sex from dual
5 )
6 ;
Table created
SQL>
SQL> create table subtb as
2 (
3 select '001' maintb_id, '语文' subject, 80 grade from dual union all
4 select '001' maintb_id, '数学' subject, 90 grade from dual union all
5 select '001' maintb_id, '英语' subject, 95 grade from dual union all
6 select '002' maintb_id, '语文' subject, 75 grade from dual union all
7 select '002' maintb_id, '数学' subject, 70 grade from dual
8 )
9 ;
Table created
SQL>
SQL> select case when row_number()over(partition by a.id order by 1) <= 1 then a.id else null end "学号",
2 case when row_number()over(partition by a.id order by 1) <= 1 then a.name else null end "姓名" ,
3 case when row_number()over(partition by a.id order by 1) <= 1 then a.sex else null end "性别",
4 b.subject "科目",b.grade "成绩"
5 from maintb a, subtb b
6 where a.id = b.maintb_id
7 ;
学号 姓名 性别 科目 成绩
---- ---- ---- ---- ----------
001 张三 男 语文 80
数学 90
英语 95
002 李四 女 语文 75
数学 70