oracle中分组后拼接分组字符串

oracle中分组后拼接分组字符串

ID:34724955

大小:49.27 KB

页数:4页

时间:2019-03-10

oracle中分组后拼接分组字符串_第1页
oracle中分组后拼接分组字符串_第2页
oracle中分组后拼接分组字符串_第3页
oracle中分组后拼接分组字符串_第4页
资源描述:

《oracle中分组后拼接分组字符串》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Oracle中分组后拼接分组字符串先分组,再把分组后的属于某组的多条记录的某字段进行拼接。实现方式如下:/* --创建表 test*/create table test(NO NUMBER,VALUE VARCHAR2(100),NAME VARCHAR2(100));/* ----插入数据*/insert into testselect * from(select '1','a','测试1' from dual union allselect '1','b','测试2' from dual union allselect '1','c','测试3' fro

2、m dual union allselect '1','d','测试4' from dual union allselect '2','e','测试5' from dual union allselect '4','f','测试6' from dual union allselect '4','g','测试7' from dual);/*--Sql语句:*/select No,ltrim(max(sys_connect_by_path(Value, ';')), ';') as Value,ltrim(max(sys_connect_by_path(Name

3、, ';')), ';') as Namefrom (select No,Value,Name,rnFirst,lead(rnFirst) over(partition by No order by rnFirst) rnNextfrom (select a.No,a.Value,a.Name,row_number() over(order by a.No, a.Value desc) rnFirstfrom Test a) tmpTable1) tmpTable2start with rnNext is nullconnect by rnNext = pr

4、ior rnFirstgroup by No;/*--检索结果如下:*//*NO VALUE NAME1 a;b;c;d 测试1;测试2;测试3;测试42 e 测试54 f;g 测试6;测试7*//********************************* 分析 *************************************/--简单解释一下那个Sql吧:/*--1、最内层的Sql(即表tmpTable1),按No和Value排序,并列出行号:*/select a.No,a.Value,a.Name,row_number() over(o

5、rder by a.No, a.Value desc) rnFirstfrom Test a;/*该语句结果如下:NO VALUE NAME RNFIRST1 d 测试4 11 c 测试3 21 b 测试2 31 a 测试1 42 e 测试5 54 g 测试7 64 f 测试6 7*//*--2、外层的Sql(即表tmpTable2),根据No分区,取出当前行对应的下一条记录的行号字段:*/select No,Value,Name,rnFirst,lead(rnFirst) over(partition by No order by rnFirst) rnN

6、ext/*--lead(rnFirst):取得下一行记录的rnFirst字段--over(partition by No order by rnFirst) 按rnFirst排序,并按No分区,--分区就是如果下一行的No字段与当前行的No字段不相等时,不取下一行记录显示*/from (select a.No,a.Value,a.Name,row_number() over(order by a.No, a.Value desc) rnFirstfrom Test a) tmpTable1;/*--该语句结果如下:NO VALUE NAME RNFIRST 

7、RNNEXT1 d 测试4 1 21 c 测试3 2 31 b 测试2 3 41 a 测试1 4 NULL2 e 测试5 5 NULL4 g 测试7 6 74 f 测试6 7 NULL*//*--3、最后就是最外层的sys_connect_by_path函数与start递归了*/sys_connect_by_path(Value, ';')start with rnNext is nullconnect by rnNext = prior rnFirst/*--这个大概意思就是从rnNext为null的那条记录开始,递归查找,--如果前一记录的rnFirst

8、字段等于当前记录的rnNext字段,就把2条记录的V

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。