WITH t AS ( SELECT 1 pk, '123, 456, 123, 678, 123' v FROM dual UNION ALL SELECT 2, '456,123' FROM dual ) -- 쪼개고, 중복제거한 뒤, 다시 합치기 SELECT pk , LISTAGG(v, ', ') WITHIN GROUP(ORDER BY lv) v FROM (SELECT pk , REGEXP_SUBSTR(v, '[^, ]+', 1, lv) v , MIN(lv) lv FROM t , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 9) WHERE lv <= REGEXP_COUNT(v, '[^, ]+') GROUP BY pk , REGEXP_SUBSTR(v, '[^, ]+', 1, lv) ) GROUP BY pk ORDER BY pk ;