วิธีการรวมสตริง (String Aggregation) ใน Oracle

วันนี้จะมาสอนวิธีการรวมสตริง (String Aggregation) ใน Oracle ครับ โดยมีโจทย์ดังนี้

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

About Nop

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.
    Blogger Comment

0 comments:

Post a Comment