您的位置:首页 > 其它

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

2010-12-10 11:37 323 查看
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会比较好。这种形式等于是在行里面与叶子的各个枝,如层级不固定,则不太好弄。树状结构和正则表达式都需要研究,现在就是依照葫芦画瓢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐