博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
listagg,vmsys.vm_concat与sys_connect_by_path函数
阅读量:5154 次
发布时间:2019-06-13

本文共 1076 字,大约阅读时间需要 3 分钟。

 
listagg与vmsys.vm_concat:可以实现行转成列,并以逗号分开的效果。
区别:listagg是11.2新增的函数,且该函数可以实现组内的排序

--vmsys.vm_concat函数使用 如下所示,按部门进行分组,同一组的在一行中用逗号隔开

SELECT deptno, wmsys.wm_concat(ename) FROM emp GROUP BY deptno;

 listagg函数:

sys_connect_by_path函数:

SELECT sys_connect_by_path(ename, ',')

  FROM (SELECT ename, deptno, rownum rn FROM emp)
 START WITH rn = 1
CONNECT BY rn = rownum;

 

--substr从第二个开始截取,去掉第一个逗号

SELECT substr(sys_connect_by_path(ename, ','), 2)
  FROM (SELECT ename, deptno, rownum rn FROM emp ORDER BY deptno)
 START WITH rn = 1
CONNECT BY rn = rownum;

 

--值截取最大的最后一条记录(与vmsys.vm_concat函数有点不同,不能按某个字段进行group by,而是不断的累积)

SELECT max(substr(sys_connect_by_path(ename, ','), 2))
  FROM (SELECT ename, deptno, rownum rn FROM emp ORDER BY deptno)
 START WITH rn = 1
CONNECT BY rn = rownum;

 

--实现与上述max一样的效果connect_by_isleaf只取出为叶节点的记录

SELECT substr(sys_connect_by_path(ename, ','), 2),connect_by_isleaf
  FROM (SELECT ename, deptno, rownum rn FROM emp ORDER BY deptno)
 WHERE connect_by_isleaf = 1
 START WITH rn=1
CONNECT BY prior rn = rn-1;

 

转载于:https://www.cnblogs.com/lanzi/archive/2011/10/26/2225665.html

你可能感兴趣的文章
2015/8/29 Python基础(3):数值
查看>>
Ora-19804: Cannot reclaim 45561856 bytes disk space from 8589934592 limit
查看>>
自己定义控件-仿iphone之ToggleButton&VoiceSeekBar
查看>>
正则表达式
查看>>
Android点击效果
查看>>
JAVA问题集锦Ⅰ
查看>>
写在前面的话
查看>>
java匿名对象_面向对象
查看>>
【坑】——待填?!
查看>>
LeetCode: Single Number I & II
查看>>
构建最小JDK Docker镜像 或者直接使用镜像:frolvlad/alpine-oraclejre8:slim
查看>>
hah
查看>>
js detect the type of device
查看>>
查看daemon使用技巧
查看>>
jzxx1000~1010题分析
查看>>
Windows Phone 8 与 windows 8 开发技术概览
查看>>
快速搭建php环境
查看>>
mysql where过滤条件中and连接的两个条件的顺序不必和建立的联合索引的字段顺序一致...
查看>>
混乱的Comcast
查看>>
java通配符写法
查看>>