zoukankan      html  css  js  c++  java
  • 在ORACLE中聚集合并字符串

    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 行出现错误:

    ORA-01722: 无效数字

    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 rn-1=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参考了一下其他人的例子,并用到了分析函数。

    每一天都要行动,在前进中寻求卓越。
  • 相关阅读:
    Java中静态代理
    Android系统如何管理自己内存的?
    手游专用大图工具TexturePacker
    手游项目初期的一些想法
    读书笔记-并发
    搜索引擎名字引发的思考
    Eclipse工具修理集
    mysql 匹配update
    mysql 匹配update
    perl binlog dml操作报告
  • 原文地址:https://www.cnblogs.com/wshsdlau/p/2579701.html
Copyright © 2011-2022 走看看