WITH TEMP AS
(
SELECT '200801;200802;200804;200602;200604;200708' STR FROM DUAL
UNION
SELECT '200803;200802;200804;200601;200604;200709' STR FROM DUAL
UNION
SELECT '200803;200802;200804;200601;200604;200710' STR FROM DUAL
)
SELECT WMSYS.WM_CONCAT(STR1) STR,WMSYS.WM_CONCAT(ISHAV) ISHAV FROM
(
SELECT STR1,REPLACE(WMSYS.WM_CONCAT(ISHAV),',','') ISHAV FROM
(SELECT T2.STR STR1,T1.STR STR2,CASE WHEN INSTR(T1.STR,T2.STR,1)>0 THEN 1 ELSE 0 END ISHAV
FROM (SELECT STR,ROWNUM RN FROM TEMP) T1,
(SELECT * FROM
(SELECT DISTINCT(REGEXP_SUBSTR(T1.STR,'[0-9]+',1,T2.LEV)) STR FROM
(SELECT REPLACE(WMSYS.WM_CONCAT(STR),',',';')||';' STR FROM TEMP) T1,
(SELECT LEVEL LEV FROM DUAL CONNECT BY LEVEL <=
(SELECT LENGTH(STR)-LENGTH(REPLACE(STR,';','')) RN FROM
(SELECT REPLACE(WMSYS.WM_CONCAT(STR),',',';')||';' STR FROM TEMP)
)
) T2
) ORDER BY STR
) T2
ORDER BY T2.STR,T1.RN
) GROUP BY STR1
)
200601,200602,200604,200708,200709,200710,200801,200802,200803,200804
011,100,111,100,001,001,100,111,011,111 |