2012. 10. 6.

DBMS/오라클] 로우합치기


MySQL] Row합치기

SELECT GROUP_CONCAT(NAME SEPARATOR ';') FROM USER_TEST GROUP BY GROUPNUM;

출처 : http://xe.issro.net/MySQL/297 




출처 : http://yangwenry.springnote.com/pages/233637



  •   예제쿼리

emp.ename 컬럼, 그리고 그룹번호로 emp.deptno 컬럼을 예로 들어 쿼리를 구성해 보자.
emp 테이블의 deptno, ename 컬럼은 아래와 같다.

10    CLARK
10    KING
10    MILLER
20    ADAMS
20    FORD
20    JONES
20    SCOTT
20    SMITH
30    ALLEN
30    BLAKE
30    JAMES
30    MARTIN
30    TURNER
30    WARD



이것을




10    CLARK,KING,MILLER
20    ADAMS,FORD,JONES,SCOTT,SMITH
30    ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD



요렇게 바꿔보자...


최초에 제시한 두 개의 쿼리들에 대해서,
오라클 개발자인 Tom Kyte가 제시한 쿼리들을 참고용으로 남기도록 하겠습니다.

SELECT     DEPTNO
         , LTRIM (SYS_CONNECT_BY_PATH (ENAME, ','), ',') PATH#
      FROM (SELECT ENAME
                 , DEPTNO
                 , ROW_NUMBER () OVER (PARTITION BY DEPTNO ORDER BY ENAME) RN
                 , COUNT (*) OVER (PARTITION BY DEPTNO) CNT
              FROM EMP)
     WHERE RN = CNT
START WITH RN = 1
CONNECT BY PRIOR RN = RN - 1
       AND PRIOR DEPTNO = DEPTNO













ORA-30004 에러 발생시....대처방법]=================

........ SYS_CONNECT_BY_PATH ( item_nm, ',' ) .......

위 문장이 들어간 쿼리를 실행 시 아래와 같은 오류가 발생항경우
ORA-30004: when using SYS_CONNECT_BY_PATH function, cannot have seperator as part of column value

원인 : item_nm 컬럼에 연결 구분자로 사용하는 ',' 가 존재하여서 발생함해결책 : item_nm 을 replace하던가 아니면 다른 특수 문자로 연결

댓글 없음:

댓글 쓰기