split기능 -> 계층형쿼리를 써야할까요? 1 3 3,168

by 강동현 split 계층형 [2012.03.08 18:07:13]


--- 원데이터 ---
col_1         col_2
--------    ------------------
20110308 김정무,정신화
20110330 양준혁,양정환,김수영
20110405 김현지,김주현,강윤아

--- 무지 희망하는 데이터 : 구분자로 스트링을 나눠서 날짜별로 출력
20110308 김정무
20110308 정신화
20110330 양준혁
20110330    양정환 
20110330 김수영 
20110405 김현지
20110405    김주현
20110405 강윤아

위와 같이 뽑기위해서 어디선가 얻을 아래와 같은 쿼리로 하니 row수가 엄청나게 나오내요.
아내 쿼리는 싱글일때만 사용해야 할것 같네요...
어떻게 하면 위와같이 뽑을수 있는지... ^^ 알려주시면 무지고맙겠습니다.

SELECT substr(wdata,
                      instr(wdata, '|', 1, LEVEL) + 1,
                      instr(wdata, '|', 1, LEVEL + 1) - instr(wdata, '|', 1, LEVEL) - 1) name
FROM (
           SELECT '|' || 'Kim|Lee|Park' || '|' wdata
           FROM DUAL
          )
CONNECT BY LEVEL <= length(wdata) - length(REPLACE(wdata, '|')) - 1
by 제로 [2012.03.09 11:31:36]

with t as
(select '20110308' col_1, '김정무,정신화' col_2 from dual
union all select '20110330', '양준혁,양정환,김수영' from dual
union all select '20110405', '김현지,김주현,강윤아' from dual
)
select col_1
, col_2
from (select col_1
   , regexp_substr(col_2, '[^,]+', 1, lv) as col_2
  from t, (select level lv
   from dual
   connect by level <= (select max(length(col_2) - length(replace(col_2, ',')))+1 cnt
    from t)))
where col_2 is not null
order by 1
;

by 강동현 [2012.03.13 10:30:13]
와우... 멋지십니다.... 짝짝짝 ^^...
공부를 많이 해야겠군요.

by 강동현 [2012.03.13 10:30:20]
와우... 멋지십니다.... 짝짝짝 ^^...
공부를 많이 해야겠군요.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입