今天出了一个bug关于Oracle的行转列问题,一开始代码中用的wm_concat()函数,但是自己用
注册中心调用的时候没有问题,但是前端调用就出问题,返回500,后来领导问了一句18c有
wm_concat()这个函数吗,12c就没有了,这是我就不懂了,
所以首先讲一下12c,18c是啥:
经过搜索和问同事,12c、18c、19c都是Oracle的版本,我每次用的都是11g,也是Oracle的版
本,还有9i。什么版本是为云计算设计,什么版本是一对一或多对一的关系,反正总的就是是
Oracle的版本就对了。
然后就是行转列的问题:
不能用wm_concat()这个函数了,有人就指引的方向,用listagg吧。
https://blog.csdn.net/sinat_36257389/article/details/81004843https://blog.csdn.net/sinat_36257389/article/details/81004843
listagg看了这一篇就懂了
完整的是 listagg() WITHIN GROUP () 行转列函数这种。
什么叫行转列:
我这里理解就是 部门中年龄在25岁以下员工的人员,本身查出来是个列表,但是要把多行合并成一行。
看上边链接中的例子,可以用自定义的分隔符分割的意思吧,例子中用的是逗号:
SELECT
T .DEPTNO,
listagg (T .ENAME, ',') WITHIN GROUP (ORDER BY T .ENAME) names
FROM
SCOTT.EMP T
WHERE
T .DEPTNO = '20'
GROUP BY
T .DEPTNO
这里结果图也从上边搬一个图片吧,我就不自己截图了,毕竟人家讲的已经很详细了。
以上内容对我自己想了解的就够用了,上边博客还说了一种 listagg() within GROUP () over ,我就不赘述了