키별로 그룹핑해서 여러 컬럼의 값을 합치기 0 8 4,477

by 깨어있는 시민 [2011.08.17 21:44:29]


aa.PNG (12,055Bytes)

일단 아래그림과 같이 쿼리를 하였습니다.


아래 그림에서 study_key별로 isocodeone, isocodetwo, isocodethree, isocodefour의 4가지 컬럼에
값이 있습니다.
결론적으로 study_key 별로 4개의 isoxxx 컬럼의 값을 구분자 ':'을 줘서 한 로우로 만들고자 하는데요.
즉,
아래 캡처화면에서 study_key '409666'을 하나의 로우로 합치면 

study_key      isototal
409666          13:23:31:32:41:42:36:37:38

이런식으로 나오게 하려고 합니다.

오라클 9i버전에서 가능한 쿼리로 어떻게 하면 될까요...
by 깨어있는 시민 [2011.08.17 21:50:14]
위에 컬럼에 색으로 들어가져 있는 부분은 Null 값이에요..

by 세리 [2011.08.17 22:31:23]
SELECT
REPLACE(WM_CONCAT(ISOCODEONE)||WM_CONCAT(ISOCODETWO)||
WM_CONCAT(ISOCODETHREE)||WM_CONCAT(ISOCODEFOUR),',',':')
FROM 테이블
GROUP BY STUDY_KEY

by 마농 [2011.08.18 00:19:37]
WITH t AS
(
SELECT 409666 study_key, '13' isocodeone, '' isocodetwo, '' isocodethree, '' isocodefour FROM dual
UNION ALL SELECT 409666, '23', '', '', '' FROM dual
UNION ALL SELECT 409666, '31', '32', '41', '42' FROM dual
UNION ALL SELECT 409666, '36', '37', '38', '' FROM dual
UNION ALL SELECT 412997, '11', '12', '21', '22' FROM dual
UNION ALL SELECT 412997, '23', '', '', '' FROM dual
UNION ALL SELECT 412997, '24', '25', '', '' FROM dual
UNION ALL SELECT 413363, '14', '15', '', '' FROM dual
UNION ALL SELECT 413364, '16', '17', '18', '' FROM dual
UNION ALL SELECT 587574, '11', '12', '21', '22' FROM dual
UNION ALL SELECT 587574, '13', '', '', '' FROM dual
)
SELECT study_key
, TRIM(BOTH ':' FROM
REGEXP_REPLACE(
XMLAGG(XMLELEMENT(x, ':', isocodeone, ':', isocodetwo, ':', isocodethree, ':', isocodefour)
ORDER BY isocodeone).EXTRACT('//text()')
, ':+', ':')
) isototal
FROM t
GROUP BY study_key
;

by 깨어있는 시민 [2011.08.18 08:48:48]
오라클 9i 버전에서 가능한 쿼리는 없을까요...??

by 마농 [2011.08.18 08:57:45]
아하.. wm_concat 는 10g 용이라 xml 쿼리로 한다고 한것이
10g에서만 되는 정규식을 사용했네요.. ㅎㅎ

by 마농 [2011.08.18 09:03:34]
SELECT study_key
, SUBSTR(
XMLAGG(XMLELEMENT(x, ':', isocodeone
, NVL2(isocodetwo, ':', ''), isocodetwo
, NVL2(isocodethree, ':', ''), isocodethree
, NVL2(isocodefour, ':', ''), isocodefour
) ORDER BY isocodeone).EXTRACT('//text()')
, 2) isototal
FROM t
GROUP BY study_key
;

by 마농 [2011.08.18 09:06:56]
SELECT study_key
, SUBSTR(
XMLAGG(XMLELEMENT(x, ':',
RTRIM(isocodeone||':'||isocodetwo||':'||isocodethree||':'||isocodefour, ':')
) ORDER BY isocodeone).EXTRACT('//text()')
, 2) isototal
FROM t
GROUP BY study_key
;

by 깨어있는 시민 [2011.08.18 10:39:15]
'마농'님 감사합니다~
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입