17,377
社区成员
发帖
与我相关
我的任务
分享
SQL> col col format A3;
SQL> col c2 format A20;
SQL> col c3 format A20;
SQL> set linesize 100 pagesize 100;
SQL> WITH t AS
2 (
3 SELECT 1 ID,'a' col,'ads'c2,'DE' C3 FROM dual UNION ALL
4 SELECT 1 ID,'b' col,'DE'c2,'DERE' C3 FROM dual UNION ALL
5 SELECT 1 ID,'c' col,'R5'c2,'DTRE' C3 FROM dual UNION ALL
6 SELECT 2 ID,'d' col,'D'c2,'DYE' C3 FROM dual UNION ALL
7 SELECT 2 id,'e' col,'ad545s'c2,'DRE' C3 FROM dual
8 )
9 select id,col,
10 listagg(c2,';')within group(order by col)over(partition by id) c2,
11 listagg(c3,';')within group(order by col)over(partition by id) c3
12 from t order by id,col;
ID COL C2 C3
---------- --- -------------------- --------------------
1 a ads;DE;R5 DE;DERE;DTRE
1 b ads;DE;R5 DE;DERE;DTRE
1 c ads;DE;R5 DE;DERE;DTRE
2 d D;ad545s DYE;DRE
2 e D;ad545s DYE;DRE
SQL>
WITH test1 AS
(
SELECT 1 ID,'a' col,'ads'c2,'DE' C3 FROM dual UNION ALL
SELECT 1 ID,'b' col,'DE'c2,'DERE' C3 FROM dual UNION ALL
SELECT 1 ID,'c' col,'R5'c2,'DTRE' C3 FROM dual UNION ALL
SELECT 2 ID,'d' col,'D'c2,'DYE' C3 FROM dual UNION ALL
SELECT 2 ID,'e' COL,'ad545s'C2,'DRE' C3 FROM DUAL
)
SELECT T1.ID, T1.COL,T2.CC2 C2, T2.CC3 C3 FROM TEST1 T1 JOIN
(select id, replace(wm_concat(c2),',',';') cc2,replace(wm_concat(c3),',',';') cc3 from test1 group by id) t2 on t1.id = t2.id;
WITH A AS
(
SELECT 1 ID,'a' col,'ads'c2,'DE' C3 FROM dual UNION ALL
SELECT 1 ID,'b' col,'DE'c2,'DERE' C3 FROM dual UNION ALL
SELECT 1 ID,'c' col,'R5'c2,'DTRE' C3 FROM dual UNION ALL
SELECT 2 ID,'d' col,'D'c2,'DYE' C3 FROM dual UNION ALL
SELECT 2 id,'e' col,'ad545s'c2,'DRE' C3 FROM dual
)
select a.id,a.col,a2.c2,a2.c3
from a,
(select id,replace(wm_concat(a1.c2),',',';') c2,replace(wm_concat(a1.c3),',',';') c3 from a a1 group by id) a2
where a.id=a2.id
rownum ID COL C2 C3
1 1 a ads;DE;R5 DE;DTRE;DERE
2 1 b ads;DE;R5 DE;DTRE;DERE
3 1 c ads;DE;R5 DE;DTRE;DERE
4 2 d D;ad545s DYE;DRE
5 2 e D;ad545s DYE;DRE
不过ORACLE已经不推荐使用wm_concat函数,建议自己写一个字符串聚合函数来实现。