Welcome 微信登录

首页 / 数据库 / MySQL / Oracle同行合并分组

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
  • 1
  • 2
  • 下一页
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)
表情: 姓名: 字数