1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | WITH t AS ( SELECT 1 pk, 'A' c1, 'B' c2, 'C' c3 FROM dual UNION ALL SELECT 2, 'A' , 'C' , 'B' FROM dual UNION ALL SELECT 3, 'D' , 'B' , 'C' FROM dual UNION ALL SELECT 4, 'E' , 'D' , 'A' FROM dual UNION ALL SELECT 5, 'X' , 'Y' , 'Z' FROM dual ) SELECT DISTINCT WM_CONCAT( DISTINCT DECODE(lv, 1, c1, 2, c2, 3, c3)) result FROM ( SELECT DISTINCT c1, c2, c3 , CONNECT_BY_ROOT(pk) pk FROM t CONNECT BY NOCYCLE PRIOR c1 IN (c1, c2, c3) OR PRIOR c2 IN (c1, c2, c3) OR PRIOR c3 IN (c1, c2, c3) ) , ( SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 3) GROUP BY pk ORDER BY result ; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | WITH t AS ( SELECT 1 pk, 'A' c1, 'B' c2, 'C' c3 FROM dual UNION ALL SELECT 2, 'A' , 'C' , 'B' FROM dual UNION ALL SELECT 3, 'D' , 'B' , 'C' FROM dual UNION ALL SELECT 4, 'E' , 'D' , 'A' FROM dual UNION ALL SELECT 5, 'X' , 'Y' , 'Z' FROM dual ) SELECT DISTINCT SUBSTR(XMLAGG(XMLELEMENT(x, ',' , x) ORDER BY x).EXTRACT( '//text()' ), 2) x FROM ( SELECT DISTINCT pk , DECODE(lv, 1, c1, 2, c2, 3, c3) x FROM ( SELECT DISTINCT c1, c2, c3 , CONNECT_BY_ROOT(pk) pk FROM t CONNECT BY NOCYCLE PRIOR c1 IN (c1, c2, c3) OR PRIOR c2 IN (c1, c2, c3) OR PRIOR c3 IN (c1, c2, c3) ) , ( SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 3) ) GROUP BY pk ORDER BY x ; |