Oracle中SYS_CONNECT_BY_PATH函数

create table test (a varchar2(10),b varchar2(10));  
 
INSERT INTO TEST (A, B) VALUES ('1', '');  
INSERT INTO TEST (A, B) VALUES ('1', '');  
INSERT INTO TEST (A, B) VALUES ('2', '');  
INSERT INTO TEST (A, B) VALUES ('2', '');  
COMMIT;  
 
SELECT A, B FROM TEST  
 
A          B  
---------- ----------  
1122          起  
 
现在需要达到如下的效果,  
A          B  
---------- ----------  
1          我,们  
2          一,起  

只想用一句sql来返回结果

SELECT A, LTRIM(MAX(SYS_CONNECT_BY_PATH(B, ',')), ',') B  
FROM (SELECT B, A, ROW_NUMBER() OVER(PARTITION BY A ORDER BY B DESC) RN  
          FROM TEST)  
START WITH RN = 1 
CONNECT BY RN - 1 = PRIOR RN  
       AND A = PRIOR A  
GROUP BY A; 

其中,SYS_CONNECT_BY_PATH函数主要作用是可以把一个父节点下的所有子节点通过某个字符进行区分,然后连接在一个列中显示。

row_number函数的用途是非常广泛,这个函数的功能是为查询出来的每一行记录生成一个序号。生产序号的方法通过over()函数里面的语句来控制。

摘自:http://database.51cto.com/art/201010/231125.htm

 

posted on 2016-07-14 17:09  超、  阅读(180)  评论(0)    收藏  举报

导航