본문 바로가기

프로그래밍 관련

[오라클] 여러로우의 값을 하나의 컬럼으로 바꾸는 방법[3]

오랫만에 글을 씁니다.

현재도 xmlagg 관련 글을 보러 오시는 분들이 계신듯 하여 짧은 정보 하나 더 올리겠습니다

오라클 11g r2 부터는 listagg라는 새로운 함수를 제공하고 있습니다


문법은

LISTAGG( [,]) WITHIN GROUP (ORDER BY ) [OVER (PARTITION BY )]

이며,


ex)

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


요런 식으로 쓰죠..

자세한 내용은 오라클 개발자 페이지

http://www.oracle-developer.net/display.php?id=515

를 참조해 주세요~


ps. listagg는 varchar2형입니다. 해서 varchar2(4000)을 넘는 경우는 뒤가 잘립니다.

     혹 그 길이가 넘는 경우는 밑에 xmlagg로 하시고 substr을 안쓰면 xml형(blob)으로 받습니다.