1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | // ตัวอย่างข้อมูล: DEPTNO ENAME ---------- ---------- 20 SMITH 30 ALLEN 30 WARD 20 JONES 30 MARTIN 30 BLAKE 10 CLARK 20 SCOTT 10 KING 30 TURNER 20 ADAMS 30 JAMES 20 FORD 10 MILLER // ผลลัพย์ที่ต้องการ: DEPTNO EMPLOYEES ---------- -------------------------------------------------- 10 CLARK,KING,MILLER 20 SMITH,FORD,ADAMS,SCOTT,JONES 30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD |
ใน Oracle มีฟังก์ชั่นอยู่สองฟังก์ชั่นเพื่อแก้ไขปัญหาดังกล่าวครับ คือ WM_CONCAT และ LISTAGG โดย Oracle เวอร์ชั่นต่ำกว่า 11g จะใช้ WM_CONCAT ส่วนเวอร์ชั่นตั้งแต่ 11g ขึ้นไปให้ใช้ LISTAGG ครับ
1. การรวมสตริงด้วย WM_CONCAT
1 2 3 | SELECT deptno, wm_concat(ename) AS employees FROM emp GROUP BY deptno; |
ผลลัพย์ที่ได้ คือ :
1 2 3 4 5 | DEPTNO EMPLOYEES ---------- -------------------------------------------------- 10 CLARK,KING,MILLER 20 SMITH,FORD,ADAMS,SCOTT,JONES 30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD |
2. การรวมสตริงด้วย LISTAGG
1 2 3 | SELECT deptno, LISTAGG(ename, ',' ) WITHIN GROUP ( ORDER BY ename) AS employees FROM emp GROUP BY deptno; |
ผลลัพย์ที่ได้ คือ :
1 2 3 4 5 | DEPTNO EMPLOYEES ---------- -------------------------------------------------- 10 CLARK,KING,MILLER 20 ADAMS,FORD,JONES,SCOTT,SMITH 30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD |
0 comments:
Post a Comment