select deptno,wm_concat(ename) from emp group by deptno;
查询结果:
参考技术B我们常常说 用SQL将Oracle中同一列的多行记录拼接成一个字符串是如何实现的:[sql]-- 原始数据-- a 111-- b 222-- a 333-- a 444-- b 555-- 最终结果-- a 111*333*444SELECTL4.L_TIME,MAX(SUBSTR(L4.分组内容,2)) 最终字段值FROM(SELECTL3.L_TIME,SYS_CONNECT_BY_PATH(L3.L_CONTENT,'*') AS 分组内容FROM(SELECTL2.L_TIME,L2.L_CONTENT,L2.L_TIME||L2.分组内编号 AS 分组字段加编号,L2.L_TIME||(L2.分组内编号-1) AS 上级分组字段加编号FROM(SELECTL1.L_TIME -- 分组依据,L1.L_CONTENT -- 同一列中 要合并的不同行 的值,ROW_NUMBER() OVER (PARTITION BY L1.L_TIME ORDER BY L1.L_CONTENT ASC) 分组内编号FROM LOGS L1) L2) L3START WITH L3.上级分组字段加编号 LIKE '%0'CONNECT BY PRIOR L3.分组字段加编号=L3.上级分组字段加编号) L4WHERE L_TIME='111'GROUP BY L4.L_TIME-- ROW_NUMBER() OVER(PARTITION BY A ORDER BY B DESC) 新列名-- 根据A分组,在分组内部根据B排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)-- SYS_CONNECT_BY_PATH 函数: 第一个参数是形成树形式的字段,第二个参数是父级和其子级分隔显示用的分隔符-- CONNECT BY PRIOR 是标示父子关系的对应-- START WITH 代表你要开始遍历的的节点本回答被提问者采纳参考技术Cwith temp as( select 'China' nation ,'Guangzhou' city from dual union all select 'China' nation ,'Shanghai' city from dual union all select 'China' nation ,'Beijing' city from dual union all select 'USA' nation ,'New York' city from dual union all select 'USA' nation ,'Bostom' city from dual union all select 'Japan' nation ,'Tokyo' city from dual ) SELECT nation,listagg(city) within GROUP(ORDER BY city) FROM temp Group BY Nation;参考技术D使用CURSOR循环拼接即可!