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
문제)
다중의 결과값을 하나의 행으로 컴마로 분리해 출력하는 방법을 알고싶습니다.
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