目前有一个部门字典表,有部门标号字段dmid,名称mc,父编号pid,排序字
段vid,其中排序字段是后加的,因为报表输出的单位顺序与dmid字段的值的
顺序是不一样的。
表中内容例如:
dmid mc        pid       vid
0    集团      null      1
001  办公室     0        2
00101 办公室1   0        1
00102 才公室2   0        3
00103 个公室3   0        2
002  人事处     0        1
00201 人事处1   0        1
00202 家人事处  0        3
00203 病人事处  0        2要求输出的顺序是:
dmid mc        pid       vid
0    集团      null      1
002  人事处     0        1
00201 人事处1   0        1
00203 病人事处  0        2
00202 家人事处  0        3
001  办公室     0        2
00101 办公室1   0        1
00103 个公室3   0        2
00102 才公室2   0        3
用单条SQL,完成排序各位大虾多帮忙,急
呀!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!

解决方案 »

  1.   

    你的数据是不是有问题,00101的pid应该是001,怎么你的第3级部门的上级部门是第1级了,把数据改一下就很容易了:SQL> SELECT t.* FROM test t START WITH pid IS NULL CONNECT BY pid = PRIOR dmid ORDER SIBLINGS BY vid;DMID                 MC                   PID                         VID
    -------------------- -------------------- -------------------- ----------
    0                    集团                                               1
    002                  人事处               0                             1
    00201                人事处1              002                           1
    00203                病人事处             002                           2
    00202                家人事处             002                           3
    001                  办公室               0                             2
    00101                办公室1              001                           1
    00103                办公室3              001                           2
    00102                办公室2              001                           3数据数据不修改的话也能实现,不过感觉不大规范,pid都没什么用处
    SELECT t.* FROM test t START WITH pid IS NULL CONNECT BY substr(dmid,1,length(dmid)-2) = PRIOR dmid ORDER SIBLINGS BY vid
      

  2.   

    select DMID,MC,PID,VID from tableA connect by pid = prior dmid start with pid is null
      

  3.   

    select DMID,MC,PID,VID from tableA connect by pid = prior dmid start with pid is null order by vid;