Oracle同行合并分组 使用函数sys_connect_by_path(column,"")的例子^^。
表结构为:create table test(bookid char(3) not null,author varchar2(10) not null); insert into test values("001","jack");insert into test values("001","tom");insert into test values("002","wang");insert into test values("002","zhang");insert into test values("002","li"); commit; select * from test;
显示结果为:BOO AUTHOR-----------------001 jack001 tom002 wang002 zhang002 li
我们想得到的结果为:BOO AUTHOR-----------------------------001 jack&&tom002 wang&&zhang&&li
SQL文为:select bookid,substr(max(sys_connect_by_path(author,"&&")),3) authorfrom(select bookid,author,id,lag(id) over(partition by bookid order by id) pid--(最后一列或者为)lead(id) over(partition by bookid order by id desc) pidfrom (select bookid,author,rownum id from test))start with pid is nullconnect by prior id=pidgroup by bookid;
详细解释:sys_connect_by_path(column,"")//column为列名,""中间加要添加的字符这个函数本身不是用来给我们做结果集连接的(合并行),而是用来构造树路径的,所以需要和connect by一起使用。 test只是张普通表,怎样才能变成树结构呢?我们需要加一个pid和id。 id我们只需加一个rownum就好。select bookid,author,rownum id from test;BOO AUTHOR ID----------------------------001 jack 1001 tom 2002 wang 3002 zhang 4002 li 5 而pid上一条记录不就是下一条记录的父节点了。这里我们需要函数lag()取前记录,和lead()相对。//把lag(id) over(order by id) pid改成lead(id) over(order by id desc) pid效果一样select bookid,author,id,lag(id) over(order by id) pidfrom (select bookid,author,rownum id from test);BOO AUTHOR ID PID-------------------------------------------001 jack 1001 tom 2 1002 wang 3 2002 zhang 4 3002 li 5 4 由于要按bookid分我们的pid,在分析函数over中我们需要加上partition by,一看下面结果我们就知道有什么不同了。select bookid,author,id,lag(id) over(partition by bookid order by id) pidfrom (select bookid,author,rownum id from test);BOO AUTHOR ID PID-------------------------------------------001 jack 1001 tom 2 1002 wang 3002 zhang 4 3002 li 5 4
MongoDB性能测试与Python测试代码Spring的多数据源配置(Spring+iBATIS + Oracle环境下)相关资讯 oracle数据库教程
- Oracle raw数据类型介绍 (01/29/2013 10:05:53)
- 监听器注册与ORA-12514 错误分析 (11/13/2012 14:30:08)
- Oracle SQL的cursor理解 (11/13/2012 14:16:17)
| - Oracle 如何强制刷新Buffer Cache (01/29/2013 10:02:46)
- dblink致Oracle库的SCN变成两库的 (11/13/2012 14:24:41)
- Linux操作系统下完全删除Oracle数 (11/13/2012 08:25:52)
|
本文评论 查看全部评论 (0)