listagg within group 与 WMSYS.wm_concat

近日,需要整一个东西

表中存的是

cola clob

a 1

a 2

b 1

b 2


但是呢,需要输出成

a ( 1 / 2 ) , b ( 1 / 2 )

原始的方法呢,是把字段都查询出来,然后呢,代码里面拼接。。

但是啊,数据有点多啊,太慢,

好吧,我承认,这都不是问题,关键是,真心懒得写这么麻烦的代码

淡疼啊。。。。

所以,百度了一下,真的,是百度,不是google,

然后,找到了 listagg within group 以及WMSYS.wm_concat

但是呢,好像都不能满足的我要求啊,有点纠结

因为我是要操作两次

然后,我就把操作拆分了一下

先使用listagg ( colb , ' / ' ) within group ()  as  colb  获取到(这里说一下,listagg是可以指定分隔符的。。。哈哈,刚好满足我的需要)

a ( 1 / 2 ) 和 b ( 1 / 2 ),这个作为子查询结果

然后呢,在外层再套上一个查询,使用WMSYS.wm_concat(cola),WMSYS.wm_concat(colb)来获取结果

当然,最后还是在了一下拼接的代码

WMSYS.wm_concat查出来的是colb类型啊。。。

使用colb.getSubString(1,(int)colb.length()),splite(",");来获取其中的内容


那么,有人这里就问我,为什么还要拼接一下啊

我想说的是,外层查询的结果是

WMSYS.wm_concat(cola) WMSYS.wm_concat ( colb )

a,b ( 1 / 2 ) , (1 / 2 )

我只要把结果里面的,分别拼接一下就OK了

不需要去拼其他的

而且

说过了数据多啊。。。

可能会有a ( 1 / 2 ) , b ( 1 / 2 )

可能是 b ( 1 / 2 )

可能是 a ( 1 / 2 )

当我查询出来的时候,不需要去判断,只需要去无脑拼接就好

因为

 WMSYS.wm_concat(cola) WMSYS.wm_concat ( colb )

a,b ( 1 / 2 ) , (1 / 2 )

b (1 / 2 )

a (1 / 2 )

a,b ( 1 ) , ( 2 )

这一步的时候,所有的结果都已经出来了,不需要再去纠结

是否有a啊,a下面是否有1,有2啊

之类的脑抽问题了。

用listagg的时候就已经搞定了,是不是很happy


之前的代码,先捞出来需要数据,然后再去多层循环拼接,啊,代码看的我都眼瞎啊,实在忍不住了,抛弃重写。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值