Oracle中将多行数据合并为一行

项目中遇到一个小问题,就是在查询一个sql语句的时候需要将多行数据合并为一行,便于后台直接通过sql拿取数据,通过百度自己总结了如下实现 的两种方式,下面直接上干货。

原sql语句(简化的sql):

select  
a.CLASSCODE,a.DEC001,a.DEC002,a.UNITCODE
from ZXYD_OP_COALLOGLINE a,ST_OPLOG b
where a.sid=b.sid and
b.sid='9468'

查询数据效果如下:

 

第一种方式,采用oracle自带的一个函数 wm_concat (支持Oracle10g,10g以上不支持,10g以上可以考虑使用listagg函数,这里不再多阐述)

select  
wm_concat(a.DEC001) HDEC001,wm_concat(a.DEC002) HDEC002,wm_concat(a.UNITCODE) HJZ
from ZXYD_OP_COALLOGLINE a,ST_OPLOG b
where a.sid=b.sid and
b.sid=9468 
group by CLASSCODE

查询数据效果如下:

但是在自己目前的实际业务中,这种以逗号分割的显示还是不太满足后台获取数据,还得自己写代码去解析,能不能直接将每一个字段都分开显示,每一个字段在sql中都定义好列名,这样就不用再去解析字段数据了

下面介绍第二种实现方式:

select  a.CLASSCODE,
max(decode(a.UNITCODE,'#1',a.DEC001)) U1DEC001,
max(decode(a.UNITCODE,'#2',a.DEC001)) U2DEC001,
max(decode(a.UNITCODE,'#1',a.DEC002)) U1DEC002,
max(decode(a.UNITCODE,'#2',a.DEC002)) U2DEC002
from ZXYD_OP_COALLOGLINE a,ST_OPLOG b
where a.sid=b.sid and
b.sid='9468'
group by CLASSCODE

查询数据效果如下:

搞定,完美解决。

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值