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

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

// ตัวอย่างข้อมูล:

    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

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