// ตัวอย่างข้อมูล: 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
SELECT deptno, wm_concat(ename) AS employees FROM emp GROUP BY deptno;
ผลลัพย์ที่ได้ คือ :
DEPTNO EMPLOYEES ---------- -------------------------------------------------- 10 CLARK,KING,MILLER 20 SMITH,FORD,ADAMS,SCOTT,JONES 30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD
2. การรวมสตริงด้วย LISTAGG
SELECT deptno, LISTAGG(ename, ',') WITHIN GROUP (ORDER BY ename) AS employees FROM emp GROUP BY deptno;
ผลลัพย์ที่ได้ คือ :
DEPTNO EMPLOYEES ---------- -------------------------------------------------- 10 CLARK,KING,MILLER 20 ADAMS,FORD,JONES,SCOTT,SMITH 30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD
0 comments:
Post a Comment