ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
更多
查看: 1126|回复: 2

sys_connect_by_path 进行列连接的疑问 [复制链接]

注册会员

一般会员

精华贴数
0
技术积分
202
社区积分
0
注册时间
2005-3-16
论坛徽章:
0
发表于 2007-7-28 21:16:48 |显示全部楼层
从网上看到的例子 有点疑惑
[PHP]
SQL> DESC TEST
Name Type         Nullable Default Comments
---- ------------ -------- ------- --------
A    NUMBER       Y                        
B    VARCHAR2(20) Y   

SQL> select * from test;

         A B
---------- --------------------
         1 a
         1 b
         1 c
         1 d
         1 e
         2 a
         2 b
         3 a
         3 v
         3 d

想要的结果:
         A RESULT
---------- --------------------------------------------------------------------------------
         1 e;d;c;b;a
         2 b;a
         3 v;d;a

有以下两种方法:
方法1:
select a,substr(max(sys_connect_by_path(b,';')),2) result
from
(select a,b,
        row_number() over(order by a,b desc) rn,
        row_number() over(order by a,b desc)-1 rn1,
        --+dense_rank() over(order by a)) rn,
        max(b) over(partition by a) bs
from test)
start with b=bs
connect by rn1 = prior rn and a = prior a
group by a;

方法2:
select a,max(sys_connect_by_path(b,';')) result
from
(select a,b,
        (row_number() over(order by a,b desc)
        --row_number()-1 over(order by a,b desc) rn1
        +dense_rank() over(order by a)) rn,
        max(b) over(partition by a) bs
from test)
start with b=bs
connect by rn-1 = prior rn
group by a;
[/PHP]

对于方法2中 rn-1 = prior rn 不是很理解 请指点 顺便我看他说是通过构造树来做到的
问题:1、 prior的用法(自己在网上搜索了 看了不是很理解)
2、在上面例子中是如何构造树的?

注册会员

一般会员

精华贴数
0
技术积分
202
社区积分
0
注册时间
2005-3-16
论坛徽章:
0
发表于 2007-7-28 21:57:16 |显示全部楼层
[PHP]
自己把里面的运行了下
SQL> select a,b,(row_number() over(order by a,b desc)+dense_rank() over(order by a)) rn from test;

         A B                            RN
---------- -------------------- ----------
         1 e                             2
         1 d                             3
         1 c                             4
         1 b                             5
         1 a                             6
         2 b                             8
         2 a                             9
         3 v                            11
         3 d                            12
         3 a                            13

10 rows selected
[/PHP]

再参照http://www.itpub.net/716901.html这篇文章 总算搞懂了

使用道具 举报

注册会员

高级会员

精华贴数
1
技术积分
10851
社区积分
52
注册时间
2006-7-30
论坛徽章:
24
生肖徽章:狗
日期:2006-09-07 10:14:43数据库板块每日发贴之星
日期:2008-07-26 01:02:20生肖徽章2007版:兔
日期:2008-10-13 11:10:112008北京奥运纪念徽章:铁人三项
日期:2008-10-24 13:27:21开发板块每日发贴之星
日期:2008-12-27 01:01:09生肖徽章2007版:马
日期:2009-11-18 10:45:032010新春纪念徽章
日期:2010-03-01 11:21:02ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51ERP板块每日发贴之星
日期:2011-05-18 01:01:012012新春纪念徽章
日期:2012-01-04 11:51:22数据库板块每日发贴之星
日期:2008-02-29 01:04:112008新春纪念徽章
日期:2008-02-13 12:43:03
发表于 2007-7-28 22:43:03 |显示全部楼层
只有自己动手做才会提高,支持!

使用道具 举报

相关内容推荐
您需要登录后才可以回帖 登录 | 注册

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 邮箱 虎吧 老博客 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部