8i에서 SYS_CONNECT_BY_PATH처럼 사용할 수 있는 방법이 있을까요? 0 6 1,197

by sun [2013.04.17 11:41:25]


 
안녕하세요.. 제가 여러 Row의 DATA를 한로우의 컬럼에 표현을 하고 싶어서 찾아봤더니

SYS_CONNECT_BY_PATH이걸 사용하면 된다는 글을 많이 봤는데..
8i(8.1.7)라서 지원을 하지 않는군요..
혹시 8i에서 할 수 있는 방법이 있을까요?
테이블 임시로 만들고 거기에 업데이트 해서 보여주는 방법의 글이 있던데.. 이렇게 말고 단지 Select로만 만들 수 있는지요?


예)
A컬럼     B컬럼
C0001    사과
C0001    배
D0001    복숭아
E0001    딸기
E0001    배

--------------------------
[결과]
C0001  사과,배
D0001  복숭아
E0001  딸기,배

이런식으로 표현하고 싶습니다.
고수님들 부탁드립니다.

by 디케이 [2013.04.17 12:15:14]
WITH t(a, b) AS
(   SELECT 'C0001', '사과' FROM dual
UNION ALL SELECT 'C0001', '배' FROM dual
UNION ALL SELECT 'D0001', '복숭아' FROM dual
UNION ALL SELECT 'E0001', '딸기' FROM dual
UNION ALL SELECT 'E0001', '배' FROM dual
)

SELECT a
  , SUBSTR(MIN(DECODE(rn,1,','||b))
   ||MIN(DECODE(rn,2,','||b))
   ,2)
 FROM (SELECT t.*
    , ROW_NUMBER() OVER (PARTITION BY a ORDER BY NULL) rn
   FROM t
  )
 GROUP BY a

by sun [2013.04.17 13:27:30]

DK님 감사합니다.
그런데.. 위에서 과일의 갯수만큼 Decode를 써야하나요.. 
즉 RN 만큼 쭉~ 이어서 붙여야 하는데.. RN이 몇줄 나올지 모르거든요..나오는 줄 만큼 그룹별로 이어서 붙여야 하는데..  다른 방법이 없을까요 ..?
올려주신걸 이용해서.. 머리짜내고 있는데.. 워낙 굳어서.. 잘 안되네요.. 
다시한번 부탁드려도 될까요? 저도 해보는데까지 해보구 잇는데.. 급하긴 하구 해서.. 
 

by 마농 [2013.04.17 13:49:32]

rn 은 최대값만큼 만들어 붙이시면 됩니다.
물론 최대값이 한정적일때 얘기지요. 무한 늘어난다면 곤란하겠지요.
rn 이 1 일때 앞에 컴마만 빼면 따로 Substr 안해도 되겠구요.


by sun [2013.04.17 14:42:36]

이 방법밖엔 없군요..

답변 감사합니다.

by 마농 [2013.04.17 15:18:29]
글쎄요. 방법중 한가지를 알려드렸을 뿐인데
섣부르게 이방법 뿐이라고 판정을 내버리시네요.
1. 사용자 함수를 만들어 사용하는 방법도 있겠구요.
  - 입력값 : 'C0001'
  - 출력값 : '사과,배'
2. 사용자그룹함수를 이용할수도 있을 듯 한데요.
  해보진 않아서...8i에서 될런지는 모르겠네요.
  방법은 이곳 오라클클럽 사용자등록팁에 올라와 있네요.
 
http://www.gurubee.net/article/57313

by sun [2013.04.18 11:11:39]

앗.. 마농님 감사합니다.

한번 해보겠습니다..

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입