Oracle数据库中:多条数据合并成一条的方法【列变行】

问题描述:在开发中,需求:对一张含有多个 产品代码的产品表,一个产品代码对应2(多)个业务码,现在业务码122表示申购,124表示赎回,需将同一支产品的不同业务码对应的费率字段合并到同一条数据上显示。实际就是解决将数据列变数据行合并显示的问题。

prd_codebusin_code...fee_rate
110002124 reebackfee
110002122 buyfee
110003122  

需要 实现的效果:

prd_codereebakfeebuyfeebusin_code
110002......122,124
110003......122,124
110004.........

解决方案: 

方法一:将该产品表【tbproduct 】用prd_code 字段拼接一遍,新表数据【 tbproduct  a,tbproduct  b】的同一行中,既含有busin_code='122' 又含有busin_code ='124' 的数据

这样可实现多行数据同一行显示。

          select a.prd_code,a.busin_code,a.rate,b.busin_code,b.rate from tbproduct  a,tbproduct  b where a.prd_code = b.prd_code and a.busin_code = '122' and b.busin_code = '124';

方法二:该方法适合ora 11以上的版本

select a.prd_code,listagg(a.rate,',') within group (order by a.busin_code) ind,listagg(a.busin_code,',') within group (order by a.busin_code) ind  from tbproduct  a group by a.prd_code

方法三:select t.prd_code,wm_concat(t.busin_code),wm_concat(t.rate) from tbproduct  t group by t.prd_code;

 

【表名自行更换】

                    

转载于:https://www.cnblogs.com/lahm/p/8553704.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值