字段如下:菜单ID,菜单名称,父级菜单ID。1      根目录     0
2      第一级A     1
3      第一级B     1
4      第二级A     2
5      第二级B     2
6      第三级A     4
7      第三级B     5
请问如何取成这样的行?--》根目录
--》根目录 --》第一级A
--》根目录 --》第一级A --》第二级A
--》根目录 --》第一级A --》第二级A --》第三级A
--》根目录 --》第一级A --》第二级B
--》根目录 --》第一级A --》第二级B --》第三级B
--》根目录 --》第一级B

解决方案 »

  1.   

    with tb as(
    select 1 cid ,'根目录' con, 0 pid from dual union all
    select 2 ,'第一级A', 1 from dual union all
    select 3 ,'第一级B', 1 from dual union all
    select 4 ,'第二级A', 2 from dual union all
    select 5 ,'第二级B', 2 from dual union all
    select 6 ,'第三级A', 4 from dual union all
    select 7 ,'第三级B', 5 from dual )
    select sys_connect_by_path(con,'--》')
        from  tb
        start with pid=0
        connect by prior cid = pid
      

  2.   


     select SYS_CONNECT_BY_PATH(菜单名称, '--》') "Path"
       from 表
      start with 父级菜单ID = '0'
    connect by PRIOR 菜单ID = 父级菜单ID
      

  3.   

    四樓正解 
     採用sys_connect_by_path 函數可得到結果 後面還要用 connect by
     select a.*,sys_connect_by_path(NAME,'->'),level from xf_dept a start with PAREDEPTID=0 connect   by prior id=PAREDEPTID 生產部                                             ->生產部 
     生產部1_1                                          ->生產部->生產部1_1 
    生產部1_1_1                                        ->生產部->生產部1_1->生產部1_1_1 
    生產部1_1_2                                        ->生產部->生產部1_1->生產部1_1_2     
    生產部1_2                                          ->生產部->生產部1_2      
    生產部1_2_1                                        ->生產部->生產部1_2_1 
     生產部1_2_2                                        ->生產部->生產部1_2_2