我有如下表
ID Name
1 a
1 b
1 c
2 d
2 e
3 f
我想得到结果
ID Name
1 a,b,c
2 d,e
3 f
我不想使用任何XMLPATH
或coalesce
功能。只是在简单的 SQL 查询中,我需要得到预期的结果。
我有如下表
ID Name
1 a
1 b
1 c
2 d
2 e
3 f
我想得到结果
ID Name
1 a,b,c
2 d,e
3 f
我不想使用任何XMLPATH
或coalesce
功能。只是在简单的 SQL 查询中,我需要得到预期的结果。
由于您在Oracle 10g
版本上,因此无法使用LISTAGG
. 它是在11g
.
请不要使用WM_CONCAT,因为它是一个未记录的功能,并且已从最新版本中删除。请参阅为什么 wm_concat 在这里不起作用?
对于 10g,您有以下字符串聚合技术:
以下是使用自 9i 以来可用的函数ROW_NUMBER()
的纯 SQL 方法:SYS_CONNECT_BY_PATH
SQL> column emp_list format a50
SQL> SELECT deptno,
2 LTRIM(MAX(SYS_CONNECT_BY_PATH(ename,','))
3 KEEP (DENSE_RANK LAST ORDER BY cur),',') AS emp_list
4 FROM (SELECT deptno,
5 ename,
6 ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY ename) AS cur,
7 ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY ename) -1 AS prev
8 FROM emp)
9 GROUP BY deptno
10 CONNECT BY prev = PRIOR cur AND deptno = PRIOR deptno
11 START WITH cur = 1;
DEPTNO EMP_LIST
---------- --------------------------------------------------
10 CLARK,KING,MILLER
20 ADAMS,FORD,JONES,SCOTT,SMITH
30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD
SQL>
在 Oracle 10 中,您可以为此使用非官方函数 WM_CONCAT。在以后的版本中,您将使用 LISTAGG。
select id, wm_concat(name)
from mytable
group by id;