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

Posted zzwo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了行转列UNPIVOT列转行PIVOT,注意是Oracle 11g及以后才支持相关的知识,希望对你有一定的参考价值。

现有一表,原始数据如下:
技术分享图片
现在需要查询出如下结果(条件是:[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及以后才支持的主要内容,如果未能解决你的问题,请参考以下文章

sql的行转列(PIVOT)与列转行(UNPIVOT)

sql的行转列(PIVOT)与列转行(UNPIVOT)

sql的行转列(PIVOT)与列转行(UNPIVOT)

sql的行转列(PIVOT)与列转行(UNPIVOT)

SqlServer行转列(PIVOT),列转行(UNPIVOT)总结

SqlServer PIVOT函数快速实现行转列,UNPIVOT实现列转行