文档章节

listagg,vmsys.vm_concat与sys_connect_by_path函数

Hyacinth_Yuan
 Hyacinth_Yuan
发布于 2015/12/28 11:11
字数 341
阅读 154
收藏 0


WMSYS.WM_CONCAT: 依赖WMSYS 用户,不同oracle环境时可能用不了,返回类型为CLOB,可用substr截取长度后to_char转化为字符类型

LISTAGG  : 11g2才提供的函数,不支持distinct,拼接长度不能大于4000,函数返回为varchar2类型,最大长度为4000.



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;

 


本文转载自:http://www.cnblogs.com/lanzi/archive/2011/10/26/2225665.html

Hyacinth_Yuan
粉丝 1
博文 14
码字总数 916
作品 0
闵行
程序员
私信 提问
oracle聚合函数XMLAGG用法简介

XMLAGG函数语法基本如图,可以用于列转行,列转行函数在oracle里有好几种方法,wm_concat也可以做 这里介绍wmconcat是因为XMLAGG实现效果和wmconcat是一样的,只是性能方面不一样,注意:XML...

smileNicky
07/10
0
0
oracle 分析函数

Oracle 行列转换函数 create table exam_record(id integer primary key,username varchar2(40),classtype varchar2(40),classname varchar2(200),score number(20,2));insert into exam_re......

guibawudi1985
2017/06/07
0
0
listagg与wm_concat

listagg与wm_concat 当查询较慢时,使用listagg代替wm_concat WMSYS.WMCONCAT: 依赖WMSYS 用户,不同oracle环境时可能用不了,返回类型为CLOB,可用substr截取长度后tochar转化为字符类型 LI...

wx5975f53898780
2018/05/15
0
0
Oracle一列的多行数据拼成一行显示字符

Oracle一列的多行数据拼成一行显示字符 oracle 提供了两个函数 WMSYS.WM_CONCAT 和 ListAgg函数。 1.WMSYS.WM_CONCAT 例: id name1 aa2 bb3 cc 要的结果是"aa,bb,cc" select WMSYS.WM_CONC......

i33
2013/10/10
474
0
oracle中把多行记录合并为一行

遇到这么一个问题 id a b c d e 1 1 1 1 1 1 1 2 2 2 2 2 1 3 3 3 3 3 2 4 4 4 4 4 2 5 5 5 5 5 3 6 6 6 6 6 4 7 7 7 7 7 5 8 8 8 8 8 5 9 9 9 9 9 这是表结构,我想查询出这样的结果 id a b......

DennisHill
2016/03/08
139
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 干啥啥不行,吃饭第一名。

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 : 李白到杜甫家吃饭。杜甫洗菜,发现只有青瓜和萝卜,心中愧疚。这时,他看见了邻居家的鸡,杜甫一时心酸,忍不住喃喃自语:我希望...

小小编辑
10分钟前
31
4
Java描述设计模式(08):桥接模式

本文源码:GitHub·点这里 || GitEE·点这里 一、桥接模式简介 1、基础描述 桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化...

知了一笑
10分钟前
4
0
C++ 函数指针的用法

天王盖地虎626
24分钟前
1
0
白话比原链跨链技术

随着Bystack的主侧链架构的推出,主侧链之间的跨链问题也成为比原链团队的主要攻克工程难题,当前比原链已经推出了两种跨链的机制,各有不同的侧重点,可能因为本身的跨链技术比较晦涩,本篇...

比原链Bytom
33分钟前
2
0
PostgreSQL参数search_path影响及作用

search_path稍微熟悉PG就会用到,用法这里就不必讲,本篇主要讲它在程序里怎样处理。 1、GUC参数定义 这是个 config_string 参数 {{"search_path", PGC_USERSET, CLIENT_CONN_STATEMENT,...

有理想的猪
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部