oracle-listagg()函数实现列转行

数据库 waitig 885℃ 百度已收录 0评论

      查询product_name字段时,出现多个数据,为避免多列展示,需要使用||进行拼接,这时可以使用oracle的listagg()函数进行列转行,代码如下

 select cont.ContNo AS policy_no,
       substr(cont.SupplierCode, 0, 4) AS supplier_code,
       (select listagg((select risk.riskname
                         from fmrisk risk
                        where risk.riskcode = f.riskcode),
                       '||') within GROUP(order by f.riskcode)
          from fcpol f
         where f.contno = cont.contno) AS product_name,
       cont.CValiDate AS effective_date,
       (case when cont.state in('01','04') then '1' when cont.state in('02','03') then '2' end) AS main_status,
       cont.InsuredName AS insured_name,
       cont.InnerContNo AS innerpolicy_no
  from fccont cont 

        使用listagg(字段,’||’) within group(order by 字段),这是其固定格式,得到的结果为:xxx||xxx,成功实现列转行。
        适用情况:
            当在列表中展示信息时,某个字段存在多个数据,需要使用拼接的方式展现出来,在oracle数据库中就可以使用listagg()函数。如果不使用这种方式,展示就会出现重复的情况。也可以在Java代码中将字段用循环的方式取出来,再使用“||”进行拼接,但相比之下,这种方式更加简单快捷有效且准确,个人建议使用。也可以把这个函数理解为sum()函数去理解。

    结果对比模拟:


         使用listagg():                                     
不使用listagg():
                                                   






本文由【waitig】发表在等英博客
本文固定链接:oracle-listagg()函数实现列转行
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)