部门表 a字段 id    parentid  name level
     01       00     湖南   1
     02       00     江西   1
     0101     01     长沙   2
     010101   0101   长沙县 3
     0201     02     南昌   2
     020101   0201   新建县 3
要求查询出结果:
湖南
   长沙
      长沙县
江西
   南昌
      新建县
...

解决方案 »

  1.   

    /* Formatted on 2008/06/02 15:32 (Formatter Plus v4.8.8) */
    WITH a AS
         (SELECT '01' ID, '00' parentid, '湖南' NAME, 1 level_1
            FROM DUAL
          UNION ALL
          SELECT '02', '00', '江西', 1
            FROM DUAL
          UNION ALL
          SELECT '0101', '01', '长沙', 2
            FROM DUAL
          UNION ALL
          SELECT '010101', '0101', '长沙县', 3
            FROM DUAL
          UNION ALL
          SELECT '0201', '02', '南昌', 2
            FROM DUAL
          UNION ALL
          SELECT '020101', '0201', '新建县', 3
            FROM DUAL)
    SELECT     decode(level_1,1,name,LPAD (NAME, LENGTHb (NAME) + LEVEL_1*2 , '  ')) name
          FROM a
    START WITH parentid = '00'
    CONNECT BY PRIOR ID = parentid结果
    Row# NAME1 湖南
    2     长沙
    3       长沙县
    4 江西
    5     南昌
    6       新建县其实你不需要加level字段,这里我测试数据之所以写level_1,是因为系统本身有level是保留字,不能用的
      

  2.   

    select replace(ltrim(POWER(10,level-1),'1'),'0',' ')||name from aconnect by prior id =  parentid