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

    每一天都要行动,在前进中寻求卓越。
  • 相关阅读:
    SQL查询语句大全集锦
    SQL Union和SQL Union All用法
    SQL Server中替换函数STUFF、replace的使用
    oscache的使用(例子)
    SQL CURSOR 游标 存储过程
    折腾iPhone的生活——AirDrop的使用
    折腾iPhone的生活——通过设置使iPhone更省电
    折腾iPhone的生活——iPhone 5s 开启 assistive touch 后卡顿的问题
    vimium快捷键列表
    在MacOSX下使用Github管理Xcode代码
  • 原文地址:https://www.cnblogs.com/wshsdlau/p/2579701.html
Copyright © 2020-2023  润新知