- -- 原始数据
- -- a 111
- -- b 222
- -- a 333
- -- a 444
- -- b 555
- -- 最终结果
- -- a 111*333*444
- SELECT
- L4.L_TIME
- ,MAX(SUBSTR(L4.分组内容,2)) 最终字段值
- FROM(
- SELECT
- L3.L_TIME
- ,SYS_CONNECT_BY_PATH(L3.L_CONTENT,'*') AS 分组内容
- FROM(
- SELECT
- L2.L_TIME
- ,L2.L_CONTENT
- ,L2.L_TIME||L2.分组内编号 AS 分组字段加编号,L2.L_TIME||(L2.分组内编号-1) AS 上级分组字段加编号
- FROM(
- SELECT
- L1.L_TIME -- 分组依据
- ,L1.L_CONTENT -- 同一列中 要合并的不同行 的值
- ,ROW_NUMBER() OVER (PARTITION BY L1.L_TIME ORDER BY L1.L_CONTENT ASC) 分组内编号
- FROM LOGS L1
- ) L2
- ) L3
- START WITH L3.上级分组字段加编号 LIKE '%0'
- CONNECT BY PRIOR L3.分组字段加编号=L3.上级分组字段加编号
- ) L4
- WHERE L_TIME='111'
- GROUP BY L4.L_TIME
还有另外一种方式,如果只返回单值的话可以用以下方式
select wm_concat(name) name from mytest; --默认是以,符号进行分割的;再配上replace()函数可以对默认的分隔进行修改