[답변] 그룹핑하여 문자열 연결하기. 버전별. 2 4 9,471

by 마농 sys_connect_by_path xmlagg [2008.10.10 16:55:38]


-- 8i --
SELECT num
     , MIN(DECODE(rn,1,''''||data||''''))
    || MIN(DECODE(rn,2,','''||data||''''))
    || MIN(DECODE(rn,3,','''||data||''''))
  FROM (SELECT num, data
             , ROW_NUMBER() OVER(PARTITION BY num ORDER BY data) rn
          FROM t
        )
 GROUP BY num
;

-- 9i --
SELECT num
     , SUBSTR(MAX(SYS_CONNECT_BY_PATH(''''||data||'''',',')),2) data
  FROM (SELECT num, data
             , ROW_NUMBER() OVER(PARTITION BY num ORDER BY data) rn
          FROM t
        )
 START WITH rn = 1
 CONNECT BY PRIOR num = num
        AND PRIOR rn = rn - 1
 GROUP BY num
;

-- 10G --
SELECT num
     , REPLACE(SUBSTR(data,2),'@','''') data
  FROM
(
SELECT num,
XMLAGG(XMLELEMENT(x,',@'||data||'@') ORDER BY data).EXTRACT('//text()').GetStringVal() data
  FROM t
 GROUP BY num
)
;

10G XML 함수에서는 따옴표가 ' 로 표시되는 관계로
부득이하게 @ 로 대체해서 다시한번 처리했습니다.

by 현 [2008.10.10 17:33:26]
멋있다...

by 옹네 [2008.10.10 17:48:58]
ㅋㅋ
저는 아직도 8i 형식으로 코딩하고 있군요.
자바 배열도 for 문 돌믄서 확인하는것처럼
(요것도 한방에 된다는걸 얼마전에야 알아서...ㅠㅠ)
정말 무식한 방법의 코딩에 젖어 있음을 여실히 알려주시네요.
새론버전 새론기능들 공부 열심히 해야겠습니다.

감사합니다.!!!!


by 드래곤정 [2009.02.09 17:37:27]
버젼따라... 후덜덜 합니다.

by 강호 [2011.03.22 10:05:44]
덕분에 많이 배워갑니다
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입