我想实现以下效果不知道怎么实现:
a   1
b   1
c   1
d   1
e   2
f   2
结果:
a   1  b,c,d
b   1  a,c,d
c   1  a,b,d
d   1  a,b,c
e   2  f
f   2  e
用wm_contact貌似不行啊

解决方案 »

  1.   

    WITH TEST AS (
    SELECT 'A' AS ID ,'1' AS NUM FROM DUAL
    UNION ALL
    SELECT 'B' AS ID ,'1' AS NUM FROM DUAL
    UNION ALL
    SELECT 'C' AS ID ,'1' AS NUM FROM DUAL
    UNION ALL
    SELECT 'D' AS ID ,'1' AS NUM FROM DUAL
    UNION ALL
    SELECT 'E' AS ID ,'2' AS NUM FROM DUAL
    UNION ALL
    SELECT 'F' AS ID ,'2' AS NUM FROM DUAL
    )
    SELECT ID,T1.NUM,REGEXP_REPLACE(REGEXP_REPLACE(TT,ID || '+'),'^,?|,?$') AS SUM FROM (SELECT  NUM,LISTAGG(ID,',') WITHIN GROUP(order by ID) AS TT FROM TEST GROUP BY NUM) T1 INNER JOIN TEST T2 ON T1.NUM = T2.NUM
      

  2.   

    上面的有点小错误。
    WITH TEST AS (
    SELECT 'A' AS ID ,'1' AS NUM FROM DUAL
    UNION ALL
    SELECT 'B' AS ID ,'1' AS NUM FROM DUAL
    UNION ALL
    SELECT 'C' AS ID ,'1' AS NUM FROM DUAL
    UNION ALL
    SELECT 'D' AS ID ,'1' AS NUM FROM DUAL
    UNION ALL
    SELECT 'E' AS ID ,'2' AS NUM FROM DUAL
    UNION ALL
    SELECT 'F' AS ID ,'2' AS NUM FROM DUAL
    )
    SELECT ID,T1.NUM,REGEXP_REPLACE(REGEXP_REPLACE(TT,ID || '+,?'),'^,?|,?$') AS SUM FROM (SELECT  NUM,LISTAGG(ID,',') WITHIN GROUP(order by ID) AS TT FROM TEST GROUP BY NUM) T1 INNER JOIN TEST T2 ON T1.NUM = T2.NUM