如何在ORACLE中聚集合并字符串
来源:优易学  2011-11-24 13:40:00   【优易学:中国教育考试门户网】   资料下载   IT书店
  sql中有聚集函数sum,但只能计算数值型,如(本文中试验都是在scott用户下):
  SQL> select deptno,sum(sal) asal
  from emp a
  group by deptno;
  DEPTNO ASAL
  30 9400
  20 10875
  10 8750
  有时要想分组查看每个部门的人员列表如下结果:
  DEPTNO ENAME
  10 CLARK,KING,MILLER
  20 SMITH,FORD,ADAMS,SCOTT,JONES
  30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD
  标准sql没有提供这个方法。
  SQL> select deptno,sum(ename) ename
  from emp a
  group by deptno;
  select deptno,sum(ename) ename
  *
  第 1 行出现错误:
  ORA01722: 无效数字
  oracle10g提供了一个函数wmsys.wm_concat可以实现:
  SQL> select deptno,wmsys.wm_concat(ename) ename
  from emp a
  group by deptno;
  DEPTNO ENAME
  10 CLARK,KING,MILLER
  20 SMITH,FORD,ADAMS,SCOTT,JONES
  30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD
  正是想要的结果。
  但是在10g以下版本怎么办呢?
  在oracle9i可以用connect by 实现,但成本很高:
  SQL> select deptno,substr(max(sys_connect_by_path(ename,',')),2) ename
  from (select a.*,row_number()over(partition by deptno order by empno) rn from emp a )
  group by deptno
  start with rn=1
  connect by rn1=prior rn and deptno=prior deptno
  order by deptno;
  DEPTNO ENAME
  10 CLARK,KING,MILLER
  20 SMITH,JONES,SCOTT,ADAMS,FORD
  30 ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES
  结果也正确。这个sql参考了一下其他人的例子,并用到了分析函数。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训