zoukankan      html  css  js  c++  java
  • ORACLE 多列合并成一行数据 WM_CONCAT函数以及REPLACE

    WM_CONCAT()方法 注意字符长度

    SELECT BERTHCODE,tpf.freedatetype,
    ( SELECT  WM_CONCAT(SBPT.PARKSTIME||'~'||SBPT.PARKETIME) SAREE FROM  
    SYS_BERTHANDTYPE SBT LEFT JOIN  SYS_BERTHTYPEPARKTIME SBPT  
    ON SBT.BERTHTYPEID = SBPT.BERTHTYPEID WHERE BERTHCODE='114163' AND 
     SBPT.DATETYPE = 1 AND  SBPT.ISALLOW = 2)  
     NOTALLOWTIMESPAN, WM_CONCAT(SUBSTR(TO_CHAR(FREESTARTTIME,'YYYY-MM-DD HH24:MI:SS'),11,9)||'~'||SUBSTR(TO_CHAR(FREEENDTIME,'YYYY-MM-DD HH24:MI:SS'),11,9)) 
    FREETIMESPAN
    FROM TRA_PRICINGBERTH TPB LEFT JOIN TRA_PRICINGFREE TPF ON TPB.PRICINGSTRATEGYID = TPF.PRICINGSTRATEGYID WHERE BERTHCODE='114163' AND FREEDATETYPE=1 GROUP BY BERTHCODE,tpf.freedatetype order by BERTHCODE

     可以使用以下这个方法REPLACE(WM_CONCAT())


    SELECT TPB.BERTHCODE, ( SELECT REPLACE(WM_CONCAT(SBPT.PARKSTIME||'~'||SBPT.PARKETIME)OVER (PARTITION BY BERTHCODE,SBPT.PARKETIME), ',', ';') AS SAREE FROM SYS_BERTHANDTYPE SBT LEFT JOIN SYS_BERTHTYPEPARKTIME SBPT ON SBT.BERTHTYPEID = SBPT.BERTHTYPEID WHERE SBT.BERTHCODE='114163' AND SBPT.DATETYPE = 1 AND SBPT.ISALLOW =2 ) AS NOTALLOWTIMESPAN ,
    REPLACE(WM_CONCAT(SUBSTR(TO_CHAR(FREESTARTTIME,'YYYY-MM-DD HH24:MI:SS'),11,9) ||'~'||SUBSTR(TO_CHAR(FREEENDTIME,'YYYY-MM-DD HH24:MI:SS'),11,9)), ',', ';') AS FREETIMESPAN FROM TRA_PRICINGBERTH TPB LEFT JOIN TRA_PRICINGFREE TPF ON TPB.PRICINGSTRATEGYID = TPF.PRICINGSTRATEGYID WHERE TPB.BERTHCODE='114163' AND TPF.FREEDATETYPE=1 GROUP BY BERTHCODE

    如果遇到版本问题 在Oracle11G下可以使用以下方法 LISTAGG()

    SELECT  TPB.BERTHCODE, ( SELECT  LISTAGG( (SBPT.PARKSTIME||'~'||SBPT.PARKETIME), '; ' ) WITHIN GROUP (ORDER BY SBPT.PARKTIMEID)
     AS SAREE  FROM SYS_BERTHANDTYPE SBT
    LEFT JOIN  SYS_BERTHTYPEPARKTIME SBPT ON SBT.BERTHTYPEID = SBPT.BERTHTYPEID 
          WHERE SBT.BERTHCODE='114163' AND  SBPT.DATETYPE = 1 AND  SBPT.ISALLOW =2
          ) AS NOTALLOWTIMESPAN ,
          LISTAGG(SUBSTR(TO_CHAR(FREESTARTTIME,'YYYY-MM-DD HH24:MI:SS'),11,9)
           ||'~'||SUBSTR(TO_CHAR(FREEENDTIME,'YYYY-MM-DD HH24:MI:SS'),11,9), '; ')WITHIN GROUP (ORDER BY TPF.FREEID)
           AS  FREETIMESPAN       
           FROM TRA_PRICINGBERTH  TPB 
           LEFT JOIN TRA_PRICINGFREE TPF  ON TPB.PRICINGSTRATEGYID = TPF.PRICINGSTRATEGYID 
          WHERE 
         TPB.BERTHCODE='114163'  
        AND TPF.FREEDATETYPE=1  
          GROUP BY BERTHCODE

    WM_CONCAT 合并成一行数据列 数据量大会超出字符长度

    SELECT wm_concat(sbpt.ParkStime||'~'||sbpt.ParkEtime) FROM SYS_BerthTypeParkTime sbpt

    REPLACE 分成多列
    SELECT  REPLACE(sbpt.ParkStime||'~'||sbpt.ParkEtime,',')
     FROM SYS_BerthTypeParkTime sbpt

  • 相关阅读:
    免费云盘,为什么不用?
    把握linux内核设计思想系列
    volley基本使用方法
    金朝阳——软件測试试题11道题目分享
    可编辑ztree节点的增删改功能图标控制---已解决
    POJ 3370 Halloween treats 鸽巢原理 解题
    Axure RP一个专业的高速原型设计工具
    Linux内核剖析 之 进程简单介绍
    [iOS]怎样在iOS开发中切换显示语言实现国际化
    scp and tar
  • 原文地址:https://www.cnblogs.com/Warmsunshine/p/4148316.html
Copyright © 2011-2022 走看看