有如下结构:x   y   y_parent
1   11     1
1   12     1
2   21     2
2   22     2
3   31     3
3   311    31
3   3111   311
4   41     4
4   411    41
5   51     5
5   52     5查询出所有的节点关系,分层显示。
得到如下结果:
-1
--11
--12-2
--21
--22-3
--31
---311
----3111-4
--41
---411-5
--51
--52

解决方案 »

  1.   

    SQL> select * from t;
     
             X          Y   Y_PARENT
    ---------- ---------- ----------
             1         11          1
             1         12          1
             2         21          2
             2         22          2
             3         31          3
             3        311         31
             3       3111        311
             4         41          4
             4        411         41
             5         51          5
             5         52          5
     
    11 rows selected
     
    SQL> 
    SQL> SELECT lpad(y, LEVEL + length(y), '-')
      2    FROM (SELECT *
      3            FROM t
      4          UNION ALL
      5          SELECT DISTINCT NULL, y_parent, NULL
      6            FROM t
      7           WHERE length(to_char(y_parent)) = 1)
      8   START WITH y_parent IS NULL
      9  CONNECT BY PRIOR y = y_parent;
     
    LPAD(Y,LEVEL+LENGTH(Y),'-')
    --------------------------------------------------------------------------------
    -4
    --41
    ---411
    -3
    --31
    ---311
    ----3111
    -2
    --21
    --22
    -1
    --11
    --12
    -5
    --51
    --52
     
    16 rows selected
     
    SQL> 
      

  2.   

    好象问level分层及列转行的特别特别多。