表结构是这样的:deptid 部门编号
deptname 部门名称
order 排序用的序号
fatherid 上级部门编号其中有一个fatherid为0的根节点。要求查询结果按照树的上下顺序排列,每个部门下面是它的子部门,同级别的部门按照order排序。根部门
  一级部门1
    一级部门1的子部门1
      一级部门1的子部门1的子部门1
    一级部门1的子部门2
  一级部门2
    一级部门2的子部门1
    。
    。
    。

解决方案 »

  1.   

    select lpad(' ',level,' ')||a.deptname from table_name a
    start with deptid=4
    connect by fatherid  =prior deptid
      

  2.   

    1980czd(川中岛):
        用你的方法可以满足每个部门下面跟着它的子部门,但是没有满足同级部门按照order排序。TodayZ(天山浪子):
        你的方法不错我正在试。
      

  3.   

    SQL> select * from tts;DEPTID               DEPTNAME             order                FATHERID
    -------------------- -------------------- -------------------- --------------------
    1                    根部门                                    0
    101                  一级部门1                                 0
    102                  一级部门2                                 0
    10101                子部门1                                   101
    10102                子部门2                                   101
    10201                子部门1                                   102
    10202                子部门2                                   102
    10203                子部门3                                   1028 rows selectedSQL> 
    SQL> select deptid, Ltrim(SYS_CONNECT_BY_PATH (deptname, '的'), '的')  from tts
      2  connect by prior deptid = fatherid
      3  start with fatherid = '0'
      4  /DEPTID               LTRIM(SYS_CONNECT_BY_PATH(DEPT
    -------------------- --------------------------------------------------------------------------------
    1                    根部门
    101                  一级部门1
    10101                一级部门1的子部门1
    10102                一级部门1的子部门2
    102                  一级部门2
    10201                一级部门2的子部门1
    10202                一级部门2的子部门2
    10203                一级部门2的子部门38 rows selected
      

  4.   

    select lpad(' ',level,' ')||a.deptname from (select * from table_name oder by deptid )  a
    start with deptid=4
    connect by fatherid  =prior deptid看下这样行不
      

  5.   

    1980czd(川中岛):  还是不行,要求在同一级别中,按照order字段来排序,即如果有三个一级部门的order是1、3、5,那么3和5在1的后面,如果1又有3个子部门order是1、2、3,则这三个子部门要按1、2、3排列在一级部门1的后面并在后两个一级部门前面。
      

  6.   

    select lpad(' ',level,' ')||a.deptname from (select * from table_name oder by  fatherid,order)  a
    start with deptid=4
    connect by fatherid  =prior deptid再试一下
      

  7.   

    1980czd(川中岛) :    OK了,多谢。结贴。