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()函數裡面的語句來控制。