달바라기
[오라클] 여러로우의 값을 하나의 컬럼으로 바꾸는 방법[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)으로 받습니다.