记录下最近写的一个转换step by step!

1,需求: 部门有4级部门,部门表以树状存储。营业部分类,  e.g. 全体营业部-***营业部 --运维 ,员工表中存储的部门ID为最低级的部门,既运维,营业部人员需显示各营业部,既二级部门。总公司人员则显示一级部门。正则表达式

  select
  cdep.psncode,
    cdep.psnname,
    cdep.officephone,
    cdep.id,
    cdep.mobile,
    cdep.addr,
    cdep.email,
    cdep.deptcode,
    cdep.pk_depde ,
    adep.deptcode,
    adep.deptname
    from (
  select emp.pk_deptdoc,
         emp.psncode,
         emp.psnname,
         emp.officephone,
         emp.id,
         emp.mobile,
         emp.addr,
         emp.email,
         dep1.deptcode,
         dep1.deplevel1,
         dep1.deplevel2,
         dep1.deplevel3,
         dep1.deplevel4,
         dep1.deptname,
         case when dep1.deptcode like '99%'
         then  dep1.deplevel2
         else dep1.deplevel1 end as  pk_depde 
    from rlzy.tcl_employee emp
   inner join (select s.deptname,
                      s.deptcode,
                      s.pk_deptdoc,
                      sys_connect_by_path(s.pk_deptdoc, '/') aa,
                      level,
                      sys_connect_by_path(s.deptcode, '/') bb,
                      rtrim(regexp_substr(sys_connect_by_path(s.pk_deptdoc,
                                                              '/') || '/',
                                          '.*?' || '/',
                                          1,
                                          2),
                            '/') as deplevel1,
                      rtrim(regexp_substr(sys_connect_by_path(s.pk_deptdoc,
                                                              '/') || '/',
                                          '.*?' || '/',
                                          1,
                                          3),
                            '/') as deplevel2,
                      rtrim(regexp_substr(sys_connect_by_path(s.pk_deptdoc,
                                                              '/') || '/',
                                          '.*?' || '/',
                                          1,
                                          4),
                            '/') as deplevel3,
                      rtrim(regexp_substr(sys_connect_by_path(s.pk_deptdoc,
                                                              '/') || '/',
                                          '.*?' || '/',
                                          1,
                                          5),
                            '/') as deplevel4
                 from rlzy.tcl_dept s
                start with s.pk_fathedept = '                    '
               connect by prior s.pk_deptdoc = s.pk_fathedept
                order siblings by s.deptcode) dep1 on emp.pk_deptdoc =
                                                      dep1.pk_deptdoc) cdep
                                                      inner join rlzy.tcl_dept adep
                                                      on cdep.pk_depde=adep.pk_deptdoc运维

 

 

 

说明:用了sys_connect_by_path函数,regexp_substr函数,rtrim函数,造成子集并造成映射表。而后用员工表和部门表,去员工和部门ID 。。。树状结构应该仍是用LDAP会比较好。这种形式等因而在行里面与叶子的各个枝,如层级不固定,则不太好弄。树状结构和正则表达式都须要研究,如今就是依照葫芦画瓢ide

相关文章
相关标签/搜索