안녕하세요.
| 1 | A,B,C |
| 2 | D |
위에 데이터를 아래처럼 변환이 가능할가요?
| 1 | A |
| 1 | B |
| 1 | C |
| 2 | D |
listagg 반대 개념으로 생각해주시면 될 것 같습니다.
안녕하세요. 주로 regexp_substr을 사용하는 것 같습니다.
with t (c1, c2) as ( select 1, 'A,B,C' from dual union all select 2, 'D' from dual ) SELECT DISTINCT c1, REGEXP_SUBSTR(c2, '[^,]+', 1, level) AS part FROM t CONNECT BY REGEXP_SUBSTR(c2, '[^,]+', 1, level) IS NOT NULL ORDER BY c1
행 복제를 위해 Connect By 를 사용하는 방법은
테이블에 직접 적용하면 안됩니다.
원치 않는 수량의 데이터가 발생되어 성능이 저하됩니다.
이게 자료가 몇건 없으면 이렇게 중복제거를 통해 결과가 나오긴 하지만
건수가 많으면 성능이 엄청나게 저하되게 됩니다.
http://gurubee.net/article/55635
WITH t AS
(
SELECT 1 id, 'A,B,C' v FROM dual
UNION ALL SELECT 2, 'D' FROM dual
)
SELECT id
, lv
, REGEXP_SUBSTR(v, '[^,]+', 1, lv) x
FROM t
, (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 9)
WHERE lv <= REGEXP_COUNT(v, '[^,]+')
ORDER BY id, lv
;
조언 감사드립니다.
몇일간 고민했었는데, 정말 감사합니다^^