我有一个数据表(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语句能够实现吗,
给我想个算法也可以 ,有不明白的地方可以问我啊
解决方案 »
- JDBC 使用jpa的形式 取出来的数据 总是第一条 这个表没有主键 为什么牛人帮忙解答一下。
- 求教,Oracle中表的定义是放在哪个文件中的
- alter tablespace test01.dbf begin backup;
- 几个ORACLE分布数据库合并到一个ORACLE数据库
- oracle UPdate ...一次能不能更新某一条记录的多个字段内容,该怎么写?
- 子查询与联合子查询问题??
- 小妹请各位大哥大姐帮忙,来者有分,分不够再加,解决马上给分……
- 如何初始化一个对象!
- 急:请高手赐教在RedHat7.3和RedHat8.0下安装Oracle 8.1.7有何不同?
- oracle中能建立一个以上的数据库?
- 问个连接列的小问题
- 请教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;