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

来源:互联网 发布:2015双十一淘宝销售额 编辑:程序博客网 时间:2024/05/16 06:21
      查询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():