如:数据
id   pid   name
1     0     A
2     0     B
3     1     A1
4     1     A2
5     2     B1
6     3     A11要得到结果:
A:  A2、A11
B:  B1
A1:  A11
A2:  A2
B1:  B1
A11: A11

解决方案 »

  1.   

    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 
    Connected as test
     
    SQL> select * from t;
     
            ID        PID NAME
    ---------- ---------- ----
             1          0 A
             2          0 B
             3          1 A1
             4          1 A2
             5          2 B1
             6          3 A11
     
    6 rows selected
     
    SQL> --下面语句只支持10g及以上版本
    SQL> 
    SQL> SELECT t.name,
      2         (SELECT wm_concat(a.name)
      3            FROM t a
      4           WHERE connect_by_isleaf = 1
      5           START WITH a.id = t.id
      6          CONNECT BY PRIOR a.id = a.pid) leaf
      7    FROM t;
     
    NAME LEAF
    ---- ----------
    A    A11,A2
    B    B1
    A1   A11
    A2   A2
    B1   B1
    A11  A11
     
    6 rows selected
     
    SQL>