需求 列出雇员表中同属一个部门的雇员名称和部门号
select t.DEPTNO 部门号, t.NAME 姓名 from employee t;结果
部门号 姓名 10 CLARK 10 KING 10 MILLER 20 ADAMS 20 FORD 20 JONES 20 SCOTT 20 SMITH 30 ALLEN 30 BLAKE 30 JAMES 30 MARTIN 30 TURNER 30 WARD借助oracle提供的wmsys.wm_concat()函数,可以方便的实现归并同一组的数据,看一下用法 方法一
select t.DEPTNO 部门号, WMSYS.WM_CONCAT(t.NAME) 姓名 From employee GROUP BY t.DEPTNO;实现结果
部门号 姓名 10 CLARK, KING, MILLER 20 ADAMS, FORD, JONES, SCOTT, SMITH 30 ALLEN, BLAKE, JAMES, MARTIN, TURNER, WARD方法二 LISTAGG函数由11gr2引入,使得字符串聚合操作更加容易。并且允许我们制定排序规则。 使用方法如下
SELECT ORG_ID,LISTAGG(ORG_NAME,',') WITHIN GROUP (ORDER BY ORG_NAME) AS "机构名称" FROM( SELECT '000000' ORG_ID,'小青菜' ORG_NAME,1 ORG_LEVEL FROM DUAL UNION ALL SELECT '000000','小白',3 FROM DUAL UNION ALL SELECT '000000','鼠',2 FROM DUAL ) GROUP BY ORG_ID;结果
ORG_ID 机构名称 000000 小白,小青菜,鼠注意看一下,中间有一个order by 排序,现在改变一下排序字段
SELECT ORG_ID,LISTAGG(ORG_NAME,',') WITHIN GROUP (ORDER BY ORG_LEVEL) FROM( SELECT '000000' ORG_ID,'小青菜' ORG_NAME,1 ORG_LEVEL FROM DUAL UNION ALL SELECT '000000','小白',3 FROM DUAL UNION ALL SELECT '000000','鼠',2 FROM DUAL ) GROUP BY ORG_ID;结果
ORG_ID 机构名称 000000 小青菜,鼠,小白其实还有很多种方法,我这里贴出地址,仅供大家研究
http://www.2cto.com/database/201501/369045.html