Oracle-11g 新函数 LISTAGG 行转列

            现在oracle数据库都在用11g的了,oracle也推出了行转列的函数LISTAGG ,我们用惯了10g的内部函数wmsys.wm_concat行转列了,出于安全考虑,大家还是用新的LISTAGG 函数吧。先说下这个函数的用法。

      帮助文档位置在SQL Language Reference->Functions->LISTAGG

      

      函数签名中的measure_expr为分组中每个列的表达式,而delimiter为合并分割符。如果delimiter不设置的话,就表示无分割符。中间within group后面的order_by_clause表示的是进行合并中要遵守的排序顺序。而后面的over子句表明listagg是具有分析函数analyze funcation特性的。


     下面就演示几个常用的例子。

SQL> 
SQL> SELECT  listagg(T.ENAME,',')  within group (order by T.EMPNO) CONCAT FROM EMP T;

CONCAT
--------------------------------------------------
SMITH,ALLEN,WARD,JONES,MARTIN,BLAKE,CLARK,SCOTT,KI
NG,TURNER,ADAMS,JAMES,FORD,MILLER


SQL> 
SQL> 
SQL> SELECT  T.DEPTNO,listagg(T.ENAME,',')  within group (order by T.EMPNO) CONCAT FROM EMP T
  2  GROUP BY T.DEPTNO;

    DEPTNO CONCAT
---------- --------------------------------------------------
        10 CLARK,KING,MILLER
        20 SMITH,JONES,SCOTT,ADAMS,FORD
        30 ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES

SQL> 
SQL> 
SQL> SELECT T.DEPTNO,T.ENAME,
  2    listagg(T.ENAME, ',') within group(order by T.EMPNO) over(partition by T.DEPTNO) as  CONCAT
  3  FROM EMP T;

    DEPTNO ENAME      CONCAT
---------- ---------- --------------------------------------------------
        10 CLARK      CLARK,KING,MILLER
        10 KING       CLARK,KING,MILLER
        10 MILLER     CLARK,KING,MILLER
        20 SMITH      SMITH,JONES,SCOTT,ADAMS,FORD
        20 JONES      SMITH,JONES,SCOTT,ADAMS,FORD
        20 SCOTT      SMITH,JONES,SCOTT,ADAMS,FORD
        20 ADAMS      SMITH,JONES,SCOTT,ADAMS,FORD
        20 FORD       SMITH,JONES,SCOTT,ADAMS,FORD
        30 ALLEN      ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES
        30 WARD       ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES
        30 MARTIN     ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES

    DEPTNO ENAME      CONCAT
---------- ---------- --------------------------------------------------
        30 BLAKE      ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES
        30 TURNER     ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES
        30 JAMES      ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES

14 rows selected.

SQL> 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值