记录9i,11g,12c版本和Oracle行转列函数疑问解答

今天出了一个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 ,我就不赘述了


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值