Oracle中SYS_CONNECT_BY_PATH函数是非常重要的函数,下面就为您介绍一个使用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
- ---------- ----------
- 1 我
- 1 们
- 2 一
- 2 起
- 现在需要达到如下的效果,
- 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()函数里面的语句来控制。
【编辑推荐】