ITPUB??ì3
ITPUB论坛 » Oracle开发 » sys_connect_by_path 进行列连接的疑问

标题: sys_connect_by_path 进行列连接的疑问
离线 skyspark
一般会员



精华贴数 0
个人空间 0
技术积分 202 (10273)
社区积分 0 (315114)
注册日期 2005-3-16
论坛徽章:0
      
      

发表于 2007-7-28 21:16 
sys_connect_by_path 进行列连接的疑问

从网上看到的例子 有点疑惑
PHP code:


SQL
DESC TEST

Name Type         Nullable 
Default Comments 

---- ------------ -------- ------- -------- 

A    NUMBER       Y                         

B    VARCHAR2
(20Y    



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,';')),2result

from

(select a,b,

        
row_number() over(order by a,b descrn,

        
row_number() over(order by a,b desc)-1 rn1,

        --+
dense_rank() over(order by a)) rn,

        
max(bover(partition by abs

 from test
)

 
start with b=bs 

 connect by rn1 
prior rn and 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 descrn1

        
+dense_rank() over(order by a)) rn,

        
max(bover(partition by abs

 from test
)

 
start with b=bs 

 connect by rn
-prior rn

 group by a
;

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


__________________
努力学习oraclemsn:skyspark_1983@hotmail.com
只看该作者    顶部
离线 skyspark
一般会员



精华贴数 0
个人空间 0
技术积分 202 (10273)
社区积分 0 (315114)
注册日期 2005-3-16
论坛徽章:0
      
      

发表于 2007-7-28 21:57 
PHP code:


自己把里面的运行了下 

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 ro

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


__________________
努力学习oraclemsn:skyspark_1983@hotmail.com
只看该作者    顶部
离线 hanjs
高级会员


来自 沈阳
精华贴数 1
个人空间 0
技术积分 10326 (137)
社区积分 52 (5473)
注册日期 2006-7-30
论坛徽章:18
会员2007贡献徽章蓝色妖姬嫦娥授权会员开发板块每日发贴之星2008北京奥运纪念徽章:铁人三项
生肖徽章2007版:兔数据库板块每日发贴之星数据库板块每日发贴之星2008新春纪念徽章生肖徽章2007版:鸡生肖徽章2007版:鼠

发表于 2007-7-28 22:43 
只有自己动手做才会提高,支持!


__________________
Database Concepts
Database Performance Tuning Guide and Reference
只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰网域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:060528号 联系我们 法律顾问