oracle的 listagg() WITHIN GROUP () 行转列函数

select s_info_windcode, rate
FROM OptionEmbeddedBondRate
where s_info_windcode ='110031.SH'

查询表中股票代码为110031.SH的数据:
在这里插入图片描述
现在要做的是通过listagg() WITHIN GROUP () 函数,将后面的rate合并为一行:

SELECT
	s_info_windcode,
	listagg (rate) WITHIN GROUP (ORDER BY rate)   as rate
FROM OptionEmbeddedBondRate
where s_info_windcode ='110031.SH'
GROUP BY s_info_windcode

在这里插入图片描述
但是这里会有一个问题,那就是rate里面的0.2 , 0.5前面的0不见了,这是number转varchar会出现的一个问题,我们可以这样:

通过substr获取该字段的 第一位,再通过decode判断是否为 “ . ” ,是的话,‘0’||字段 拼接; 否 返回 该字段 。

decode(substr((to_char(rate)),0,1),'.','0'||to_char(rate),to_char(rate))

结合起来就是下面这样:


SELECT s_info_windcode, 
       listagg (decode(substr((to_char(rate)),0,1),'.','0'||to_char(rate),to_char(rate)) , ',') WITHIN GROUP (ORDER BY rate)   as rate
  FROM OptionEmbeddedBondRate
  where s_info_windcode ='110031.SH'
  GROUP BY s_info_windcode

查询结果如下所示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值