高手指教,sql语句,主表与子表连接 查询结果显示。。。

云飞_ 2015-06-26 08:46:32
mainTB(主表):   id      name   sex
001 张三 男
002 李四 女

subTB(子表) mainTB_id subject grade
001 语文 80
001 数学 90
001 英语 95
002 语文 75
002 数学 70

如何用sql实现如下效果,高手帮忙

...全文
1325 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xgq8217 2018-06-04
  • 打赏
  • 举报
回复
云飞_ 2016-03-04
  • 打赏
  • 举报
回复
谢谢各位大神了。散分
碧水幽幽泉 2015-06-28
  • 打赏
  • 举报
回复

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
碧水幽幽泉 2015-06-28
  • 打赏
  • 举报
回复
这个需求可以用SQL语句实现:

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
chengccy 2015-06-26
  • 打赏
  • 举报
回复
这种存在合并行的样式让报表工具去做,oracle没法做的
binsweet 2015-06-26
  • 打赏
  • 举报
回复
结果集都是基于行的,要纵向合并,那是界面操作,和sql无关
云飞_ 2015-06-26
  • 打赏
  • 举报
回复
好的 谢谢了

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧