ORACLE 多列合并成一行数据 WM_CONCAT函数以及REPLACE
2014-12-06 15:37
423 查看
WM_CONCAT()方法 注意字符长度
可以使用以下这个方法REPLACE(WM_CONCAT())
如果遇到版本问题 在Oracle11G下可以使用以下方法 LISTAGG()
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
相关文章推荐
- oracle 中合并数据 wm_concat(column)函数的使用
- Oracle多行数据合并一行显示【SQL实现详细解析】
- 利用Oracle分析函数row_number和sys_connect_by_path实现多行数据合并为一行
- oracle查询多行数据合并成一行数据
- Sql:多行合并一行以及多条数据取时间最早的那条
- 利用Oracle分析函数实现多行数据合并为一行
- 利用Oracle分析函数实现多行数据合并为一行
- 如何将oracle数据1000行合并成一行
- oracle查询多行数据合并成一行数据
- oracle 建表 造数据 存储过程 创建数据库的远程连接 以及一列的多行合并
- oracle合并多条数据为一条 wmsys.wm_concat
- oracle多行数据合并成一行
- oracle中如何把表中具有相同值列的多行数据合并成一行
- Oracle中使用REGEXP_SUBSTR,regexp_replace,wm_concat函数
- Oracle多行数据合并一行
- oracle查询多行数据合并成一行数据!
- Oracle多行数据合并一行.sql
- 利用Oracle分析函数row_number和sys_connect_by_path实现多行数据合并为一行
- filebeat - logstash 多行合并 解决数据丢失以及无法读取最后一行
- oracle查询多行数据合并成一行数据