我有一个数据表(EMP), 结构如下 ORG表 组织表
ORG_ID(组织的ID,相当于主键), ORG_NM(组织名字), PARENT_ORG_ID(父组织ID),ORG_LEVEL(组织层数)ORG_BELNG (员工--组织表)
ORG_ID(组织的ID),EMP_ID(员工ID) EMP 员工表
EMP_CLS(员工分类),EMP_ID(员工ID)
一个组织有下属组织,下属组织也有下属组织, ORG_LEVEL(组织层数)代表组织是在第几层, 最高层为0, 第一层(最高层的下一层)ORG_LEVEL为1
一个组织有N个员工,员工有两种不能状态, 用EMP_CLS 表示
EMP_CLS有两种状态, 用1, 2, 数字表示, 我想用SQL语句显示为下面的效果: ORG_NM ¦ 人数(这个组织共有多少人数,EMP_CLS=1时)EMP_ACCOUNT1¦(EMP_CLS=2时)MP_ACCOUNT2
¦
| ¦ ¦ ¦ ¦
| ¦ ¦ ¦ ¦
¦ | ¦ | ¦ ¦
¦ | ¦ | ¦ ¦ EMP_ACCOUNT1 EMP_ACCOUNT2 EMP_ACCOUNT3 分别是员工状态为EMP_CLS=1,EMP_CLS=2,EMP_CLS3的员工共有多少人
既显示的表有三例,如下
ORG_NM ¦
EMP_ACCOUNT1¦ 人数(这个组织共有多少人数,EMP_CLS=1时)
MP_ACCOUNT2人数(这个组织共有多少人数,EMP_CLS=2时)现在想用SQL语句查出如上显示的表, 但EMP_ACCOUNT1要包括所有的下属组织
大家帮我考虑一下, 用SQL语句能够实现吗,
给我想个算法也可以 ,有不明白的地方可以问我啊
ORG_ID(组织的ID,相当于主键), ORG_NM(组织名字), PARENT_ORG_ID(父组织ID),ORG_LEVEL(组织层数)ORG_BELNG (员工--组织表)
ORG_ID(组织的ID),EMP_ID(员工ID) EMP 员工表
EMP_CLS(员工分类),EMP_ID(员工ID)
一个组织有下属组织,下属组织也有下属组织, ORG_LEVEL(组织层数)代表组织是在第几层, 最高层为0, 第一层(最高层的下一层)ORG_LEVEL为1
一个组织有N个员工,员工有两种不能状态, 用EMP_CLS 表示
EMP_CLS有两种状态, 用1, 2, 数字表示, 我想用SQL语句显示为下面的效果: ORG_NM ¦ 人数(这个组织共有多少人数,EMP_CLS=1时)EMP_ACCOUNT1¦(EMP_CLS=2时)MP_ACCOUNT2
¦
| ¦ ¦ ¦ ¦
| ¦ ¦ ¦ ¦
¦ | ¦ | ¦ ¦
¦ | ¦ | ¦ ¦ EMP_ACCOUNT1 EMP_ACCOUNT2 EMP_ACCOUNT3 分别是员工状态为EMP_CLS=1,EMP_CLS=2,EMP_CLS3的员工共有多少人
既显示的表有三例,如下
ORG_NM ¦
EMP_ACCOUNT1¦ 人数(这个组织共有多少人数,EMP_CLS=1时)
MP_ACCOUNT2人数(这个组织共有多少人数,EMP_CLS=2时)现在想用SQL语句查出如上显示的表, 但EMP_ACCOUNT1要包括所有的下属组织
大家帮我考虑一下, 用SQL语句能够实现吗,
给我想个算法也可以 ,有不明白的地方可以问我啊
解决方案 »
- oracle导入数据库备份文件
- select T.a,T.b,S.c from T,s where T.b==S.b;这条语句和自然连接执行效率一样吗
- 统计类sql语句求助
- ORACLE9i有没有记录每条SQL语句的来源阿,急!在线等!
- DB2,SQLSERVER的数据怎么能导到ORACLE中去?
- 如何取得orcle过程 out 参数的返回值?
- 请问在oracle里如果同时对一个表上锁,什么出现什么情况?
- 在oracle中用那个函数可以得到两个日期之间的天数?
- 请问在PL/SQL Developer 5.1 中的 Projects菜单 如何使用?
- 急,急,急,谢了!QQ:89448918 [email protected]
- 问个连接列的小问题
- 请教select 分组求和嵌套聚合
0 资源下载中心 0 0
1 免费体验1 0 1
2 免费体验2 1 2
3 优惠首选时代 0 1
ORG_BELNG 表
ORG_ID,EMP_ID
0 11111
0 11112
1 11113
1 11116
2 11114
2 11115
EMP 员工表
EMP_CLS(员工分类),EMP_ID(员工ID
1 11111
2 11112
1 11113
1 11114
2 11115
3 11116 求 ORG_LEVEL =1 下的EMP_CLS=1的员工有多少个, EMP_CLS=2的员工有多少个, 因为ORG_LEVEL =1有下属组织, 所以计算人数时,也要把他的下属组织人数也要计算在内
where o.EMP_ID = e.EMP_ID 求机构下的人员用select ORG_ID from tabke start with ORG_ID=1 connect by PARENT_ORG_ID=prior.ORG_LEVEL (没查,可能有点错误)2个sql和起来就差不多,手边没有oracle,不能测试
sum(case when em.EMP_CLS = 1
then 1
else 0
end) as EMP_ACCOUNT1,
sum(case when em.EMP_CLS = 2
then 1
else 0
end) as EMP_ACCOUNT2
from EMP em,
ORG_BELNG ob
where em.EMP_ID = ob.EMP_ID
and ob.org_id in (
select distinct
tt.ORG_ID
from ORG tt
start with tt.ORG_LEVEL = 1
connect by prior tt.ORG_LEVEL = tt.PARENT_ORG_ID
)
group by ob.org_id;
但mantisXF 的语句还是没满足我的要求, select distinct
tt.ORG_ID
from ORG tt
start with tt.ORG_LEVEL = 1
connect by prior tt.ORG_LEVEL = tt.PARENT_ORG_ID
会把下属组织的ORG_ID都查出来了,
我要的org_id只是第一层的,
而且计算的人数不是包括下属组织的,我这里没有ORACLE, 不知道有没有分析错了,
我不知道是否要写这么多行,才能达到目的
求 ORG_LEVEL =1 下的EMP_CLS=1的员工有多少个,EMP_CLS=2的员工有多少个,因为ORG_LEVEL=1有下属组织,所以计算人数时,也要把他的下属组织人数也要计算在内.这可是你说的要计算人数时,也要把他的下属组织人数也要计算在内的.
如果只是计算org_id只是第一层的话,那就试试看下面的sql:
select ob.org_id,
sum(case when em.EMP_CLS = 1
then 1
else 0
end) as EMP_ACCOUNT1,
sum(case when em.EMP_CLS = 2
then 1
else 0
end) as EMP_ACCOUNT2
from EMP em,
ORG_BELNG ob,
ORG o
where em.EMP_ID = ob.EMP_ID
and ob.ORG_ID = o.ORG_ID
and o.ORG_LEVEL = 1
group by ob.org_id;