首页 > 数据库技术 > 详细

行转列UNPIVOT、列转行PIVOT,注意是Oracle 11g及以后才支持

时间:2018-03-22 16:37:09      阅读:350      评论:0      收藏:0      [点我收藏+]
现有一表,原始数据如下:
技术分享图片
现在需要查询出如下结果(条件是:[80,~]优秀,[60,80)及格,[~,60)不及格):
技术分享图片
先用UNPIVOT对原始表进行转换,列转行
select * from CB_SHANGCICB UNPIVOT (cj for kc in ("语文","数学","英语")) ,结果如下:
技术分享图片
再对cj进行区间匹配
with tt as (select * from score unpivot (cj for kc in ("语文","数学","英语")))
select kc,(case when cj>=80 then ‘优秀‘ when cj>=60 then ‘及格‘ else ‘不及格‘ end) cj from tt;
执行结果如下:
技术分享图片
然后使用PIVOT进行列转行
select * from (
with tt as (select * from score unpivot (cj for kc in ("语文","数学","英语")))
select kc,(case when cj>=80 then ‘优秀‘ when cj>=60 then ‘及格‘ else ‘不及格‘ end) cj from tt
) PIVOT max(cj) for kc in (‘语文‘ as "语文",‘数学‘ as "数学",‘英语‘ as "英语") ,红色背景部分必须为聚合函数;
 
 
 

行转列UNPIVOT、列转行PIVOT,注意是Oracle 11g及以后才支持

原文:https://www.cnblogs.com/zzwo/p/8624409.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!