有一树状结构的表,如下所示:id(子ID)   pid(父ID)    name
------------------------
1       -1            中国
2          1            湖北省
3          2            武汉市
4          3            洪山区
5          3            江岸区
我想产生这样一个视图,如下所示中国 湖北省  武汉市  江岸区
中国 湖北省  武汉市  洪山区
这是动态的,按照树结构,数据可随意增减!
如何产生这个视图,请高手示下, 拜谢!

解决方案 »

  1.   


    SELECT NN
      FROM (SELECT SYS_CONNECT_BY_PATH(NAME, '  ') NN, LEVEL LL
              FROM TT
             START WITH PID = '-1'
            CONNECT BY PRIOR ID = PID)
     WHERE LL = (SELECT MAX(LL)
                   FROM (SELECT LEVEL LL
                           FROM TT
                          START WITH PID = '-1'
                         CONNECT BY PRIOR ID = PID));输出:
    中国 湖北省  武汉市  江岸区 
    中国 湖北省  武汉市  洪山区
      

  2.   

    Try it ..
    SQL> select * from table1;       CID CNAME           FID
    ---------- -------- ----------
             1 china            -1
             2 hubei             1
             3 wuhan             2
             4 hongshan          3
             5 jianan            3SQL> 
    SQL> select path
      2    from (
      3          select ltrim(sys_connect_by_path(cname,' '),' ') path,
      4                 level lev
      5            from table1 tt
      6          connect by prior cid = fid
      7         )zz
      8   where lev = (select max(level)
      9            from table1 tt
     10          connect by prior cid = fid);PATH
    --------------------------------------------------------------------------------
    china hubei wuhan hongshan
    china hubei wuhan jianan
      

  3.   

    SQL> with a as (select 1 id,-1 pid,'中国' name from  dual
      2             union
      3             select 2 id,1 pid,'湖北省' name from  dual
      4             union
      5             select 3 id,2 pid,'武汉市' name from  dual
      6             union
      7             select 4 id,3 pid,'洪山区' name from  dual
      8             union
      9             select 5 id,3 pid,'江岸区' name from  dual
     10             )
     11  SELECT NAME FROM
     12  (select ID,SUBSTR(SYS_CONNECT_BY_PATH(NAME, '/'),2)  NAME,CONNECT_BY_ISLEAF ISLEAF
     13  FROM A
     14  START WITH PID=-1
     15  CONNECT BY PRIOR ID=PID  )
     16  WHERE ISLEAF=1
     17  /
     
    NAME
    --------------------------------------------------------------------------------
    中国/湖北省/武汉市/洪山区
    中国/湖北省/武汉市/江岸区
     
    SQL> 
      

  4.   

    to , oracledbalgtu 
    谢谢, 差不多了, 就这个意思, 但是数据在一列里, 能把它按各个区域分开么?如下所示国家 编码 省名称  省编码  城市   城市编码  区       区码
    中国  1  湖北省    2    武汉市     3      4       洪山区
    中国  1  湖北省    2    武汉市    3     5       江岸区