添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

曾庆顺 数据和云

墨墨导读: 本文来自墨天轮用户“只是甲”的投稿, 总结所有Oracle行转列的语法,供大家参考学习。


墨天轮主页:https://www.modb.pro/u/372619


注:本文测试以Oracle 11g下的scoot schema为例。


需求:求emp表各个岗位的工资之和,若无,用0代替。


一、decode语法 Oracle行转列语法总结大全_Jav


Oracle行转列语法总结大全_Jav_02

二、CASE语法 Oracle行转列语法总结大全_Jav_03


Oracle行转列语法总结大全_Jav_04


三、PIVOT语法

Oracle行转列语法总结大全_Jav_05

Oracle行转列语法总结大全_Jav_06


不过这个地方null值没有替换成0,要通过nvl再转换一下。 Oracle行转列语法总结大全_Jav_07 Oracle行转列语法总结大全_Jav_08


小结:

decode 语法简单,Oracle独有。
case sql标准语法。
pivot 语法最为简单,Oracle、sqlserver、postgresql均可以使用。


下面再来讲讲wm_concat、listagg、xmlagg。


需求:部门编号为20的所有的员工信息,以行的形式显示。


四、wm_contact语法

SELECT T.DEPTNO, wm_concat(t.ename) names  FROM EMP T WHERE T.DEPTNO = '20' GROUP BY T.DEPTNO;


Oracle行转列语法总结大全_Jav_09 Oracle行转列语法总结大全_Jav_10


五、listagg语法

Oracle行转列语法总结大全_Jav_11

Oracle行转列语法总结大全_Jav_12

六、xmlagg语法

Oracle行转列语法总结大全_Jav_13 Oracle行转列语法总结大全_Jav_14


小结:

wm_concat 语法最简单,但是默认是 clob列,plsql不容易导出。
listtagg 语法稍微复杂,但是默认是字符串,性能会比wm_concat 好,但是超过4000个字符,受限制。
xmlagg 字符串超过4000字符,就需要使用xmlagg。


作者


曾庆顺,10年数据库运维、数据仓库及大数据经验,擅长Oracle、MySQL、Hive,具有Oracle 10g OCP,Linux RHCE,长期服务于通信、金融信贷行业。


墨天轮原文链接:https://www.modb.pro/db/26033(复制到浏览器打开或者点击“阅读原文”立即查看)