NM GW_NM
홍길동 국어
홍길동 수학
홍길동 한국지리
이순신 국어
이순신 영어
이순신 세계사
이순신 물리
강감찬 지구과학
데이터가 위와 같이 있을 때 아래와 같이 보여주려고 합니다.
홍길동 국어, 수학, 한국지리
이순신 국어, 영어, 세계사, 물리
여러 게시물을 검색해봐도 뾰족한 답이 없네요.
도움 부탁드립니다.
select nm, ltrim(sys_connect_by_path(gw_nm,','),',') as nm
from (
select nm,
gw_nm
, row_number() over (partition by nm order by gw_nm) rn
, count (*) over (partition by nm ) cnt
from table
) a
where level = cnt
start with rn = 1
MAX님 답변 감사합니다만,
WITH T AS
(
SELECT '홍길동' NM, '국어' GW_NM FROM DUAL UNION ALL
SELECT '홍길동', '수학' FROM DUAL UNION ALL
SELECT '홍길동', '한국지리' FROM DUAL UNION ALL
SELECT '이순신', '국어' FROM DUAL UNION ALL
SELECT '이순신', '영어' FROM DUAL UNION ALL
SELECT '이순신', '세계사' FROM DUAL UNION ALL
SELECT '이순신', '물리' FROM DUAL UNION ALL
SELECT '강감찬', '지구과학' FROM DUAL
)
SELECT NM, LTRIM(SYS_CONNECT_BY_PATH(GW_NM,','),',') AS GW_NM
FROM (
SELECT NM
, GW_NM
, ROW_NUMBER() OVER (PARTITION BY NM ORDER BY GW_NM) RN
, COUNT (*) OVER (PARTITION BY NM ) CNT
FROM T
) A
WHERE LEVEL = CNT
START WITH RN = 1
위 query를 실행하니 'CONNECT BY 구를 지정해 주십시오'라는 오류가......
-- 다음 추가하시면 되구요. -- START WITH rn = 1 CONNECT BY PRIOR nm = nm AND PRIOR rn = rn - 1 -- 요런 방법도 있습니다. -- SELECT nm , wm_concat(gw_nm) gw_nm_list FROM t GROUP BY nm ;
MAX님, 마농님 모두 진심으로 감사드립니다.
제가 여기저기 찾아보니 이런 방법도 있네요.
FROM (SELECT NM, GW_NM
, COUNT(*) OVER (PARTITION BY NM ) CNT
START WITH rn = 1
CONNECT BY PRIOR nm = nm
AND PRIOR rn + 1 = rn
, WM_CONCAT(GW_NM) GW_NM_9I
, SUBSTR(XMLAGG(XMLELEMENT(X,',',GW_NM)).EXTRACT('//text()'), 2) GW_NM_10G
, LISTAGG(GW_NM, ',') WITHIN GROUP(ORDER BY GW_NM) GW_NM_11G
GROUP BY NM