// ตัวอย่างข้อมูล:
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