oracle行转列后取一行数据的多个字段

changerzhuo 2018-12-19 10:59:08


如图, 将多行数据转换为按照name字段分组的一行数据。 求大佬指教oracle中通过sql怎么实现该功能。
...全文
316 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
changerzhuo 2018-12-20
  • 打赏
  • 举报
回复
谢谢各位大佬意见, 早上想到了解决方案, 依旧使用max,decode的方法就能解决。 之前思路陷入了误区。
如图, 这样看来, 再多几个字段 依旧能通过这种方法解决:
卖水果的net 2018-12-20
  • 打赏
  • 举报
回复
pivot 和 unpivot 这两个函数,楼主研究一下。
风影萧诺 2018-12-20
  • 打赏
  • 举报
回复
如果只按照你上面提供的数据和结果是下面的SQL:
SELECT T1.NAME,T1.SCORE AS "英语分",T1.SORT
,T2.SCORE AS "语文分",T2.SORT
,T3.SCORE AS "数学分",T3.SORT
FROM TABLENAME T1
LEFT JOIN TABLENAME T2 ON T1.NAME = T2.NAME AND T2.SUBJECT = '语'
LEFT JOIN TABLENAME T3 ON T1.NAME = T3.NAME AND T2.SUBJECT = '数'
WHERE T1.SUBJECT = '英'

上面SQL出你上面数据结果是没有问题了。

但实际生活中的数据和业务是多变化的,例如上面值是一个人的3课成绩,如果有个人只有2科或1科的成绩这个数据结果会有偏差的,请楼主结合实际情况处理。




Wazy_csdn 2018-12-20
  • 打赏
  • 举报
回复

select distinct a.name,nvl((select score from table_name where subject='Chinese' and name=a.name ),'') Chinese,
nvl((select scrt from table_name where subject='Chinese' and name=a.name ),'') Sort,
nvl((select score from table_name where subject='Math' and name=a.name ),'') Math, 
nvl((select scrt from table_name where subject='Math' and name=a.name ),'') Sort, 
nvl((select score from table_name where subject='English' and name=a.name ),'') English,
nvl((select scrt from table_name where subject='English' and name=a.name ),'') English
from table_name a
办法有点笨,但是还是可以实现目的的

17,086

社区成员

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

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