메뉴 건너뛰기

tnt_db

http://www.soqool.com/servlet/board?cmd=view&cat=100&subcat=1010&seq=57&page=2&position=2글쓴이 : 김홍선


문제)

다중의 결과값을 하나의 행으로 컴마로 분리해 출력하는 방법을 알고싶습니다.

return
=========
홍길동
김길동     --> 홍길동, 김길동, 이길동
이길동
==========


답변)

emp.ename 컬럼을 예로 들어 쿼리를 구성해 보면 아래와 같다.
정확히 어떤 컬럼들이 어떤 역할을 하는지 숙지하는 것이 중요.

SELECT   SUBSTR (MAX (SYS_CONNECT_BY_PATH (ename, ',')), 2) path#
   FROM (SELECT ename, ROWNUM rnum
       FROM emp)
START WITH rnum = 1
CONNECT BY PRIOR rnum = rnum - 1


http://otn.oracle.co.kr/forum/forum_open_view.jsp?forum_seqno=20060511113925&forum_cate=SQL

근데 위에서은 잘 안되네...





로우 수가 DYNAMIC하게 변동된다면 다른 방
법을 사용하셔야할 것같네요.
그래서 9버전부터지원되는 SYS_CONNECT_BY_PATH 함수를 이용한
다른 방법으로 한번 구현 해봤습니다.

아래의 데이타가 존재한다면

ENAME
---------
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS




SELECT PATH
FROM
(
SELECT SYS_CONNECT_BY_PATH(ENAME,'','') PATH
FROM
(SELECT ENAME,ROWNUM LEVEL1, ROWNUM-1 LEVEL2
FROM EMP)
START WITH LEVEL2=0
CONNECT BY PRIOR LEVEL1=LEVEL2
ORDER BY LEVEL DESC
)
WHERE ROWNUM = 1

결과

PATH
----------------------------
SMITH,ALLEN,WARD,JONES,MARTIN,BLAKE,CLARK,SCOTT,KING,TURNER,ADAMS

위로