记录下最近写的一个转换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会比较好。这种形式等于是在行里面与叶子的各个枝,如层级不固定,则不太好弄。树状结构和正则表达式都需要研究,现在就是依照葫芦画瓢
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会比较好。这种形式等于是在行里面与叶子的各个枝,如层级不固定,则不太好弄。树状结构和正则表达式都需要研究,现在就是依照葫芦画瓢
相关文章推荐
- Step by Step 创建一个新的Dynamics CRM Organization
- Step by Step 创建一个 Web Service
- [ASP.NET 设计模式] 用Visual Studio2010搭建一个简单的分层结构示例Step by Step —— 06 用户界面层
- [WCF Step by Step 读书笔记] Chapter02 寄宿一个WCF服务
- Step by Step,用JAVA做一个FLAPPYBIRD游戏(二)
- 根据ajax从服务器获取数据的时间和ID,根据最近的时间,显示一个记录重复ID的数字
- git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常常需要寻找两个分支最近的分割点,即base.假设git 树是多叉树,请实现一个算法,计算git树上任意两点的最近分割点。 (假设git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包含n个字符串,每个字符串由字符'0
- AngularJS Step by Step (2) : 一个数据绑定的例子
- Step by step 如何创建一个新森林
- 利用wojilu框架仿一个网站的全过程(Step by Step利用wojilu框架开发网站系列二 附源码)
- 【java学习记录】1.设计一个能在英尺制和米制之间转换的Length类,并在TestLength类中测试
- OpenCL 学习step by step (2) 一个简单的OpenCL的程序
- 最近开始学习ubuntu,想记录一下学习过程,也为在学习的朋友提供一个参考
- stepbystep记录在30岁转型IT的自学之路
- Step by Step,用JAVA做一个FLAPPYBIRD游戏(前言)
- 最近整理的一些行列转换sql(有自己的,有别人的),留作记录
- 最近开发一个项目使用了Nhibernate出现了如下问题deleted object would be re-saved by cascade (remove deleted object from
- 转载——Step by Step 创建一个 Web Service
- 今天聊发兴致,写了一个 COM STEP BY STEP,结果。。。
- Step by step 活动目录中添加一个子域