码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2018-03-22 17:41:06      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:when   case   png   shang   pivot   红色   数据   行转列   英语   

现有一表,原始数据如下:
技术分享图片
现在需要查询出如下结果(条件是:[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及以后才支持

标签:when   case   png   shang   pivot   红色   数据   行转列   英语   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!