我要的SQL语句看来以前没人碰到过,请高手指点。

qiangsheng 2005-07-18 04:19:13
表Branch(部门):Code(编码)、Name(名称)
表Position(职位):Code(编码)、Name(名称)
表Strength(编制):Id(序号)、BranchCode(部门编码)、PositionCode(职位编码)、Budget(人数)
表Employee(人员):Id(序号)、Name(姓名)、BranchCode(部门编码)、PositionCode(职位编码)…………
表EmployeeChange(人员变动):Id(序号)、FromBranchCode(从部门编码)、ToBranchCode(到部门编码)、ChangeTime(变动时间)…………

要得到一张部门人员情况表

部门   编制人数  实际人数  缺编人数(编制-实际)  人员减少  人员增加


其中,对于每一个Branch.Code,编制人数从Strength表取得,实际人数是Employee表中同部门人员的和,人员减少是EmployeeChange表中同FromBranchCode的记录数,人员增加是EmployeeChange表中同ToBranchCode的记录数。
...全文
67 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
qiangsheng 2005-07-19
我自己又加了几个显示字段,结果字段名重复了,但是企业管理器执行不报错,保存才报错。

问题解决,结贴了。
回复
qiangsheng 2005-07-18
是我自己搞错了,

多谢。。
回复
子陌红尘 2005-07-18
查询本身是否能查到数据?创建视图时报什么错?
回复
qiangsheng 2005-07-18
保存不成视图啊,怎么办?
回复
子陌红尘 2005-07-18
select
部门 = a.Name,
编制人数 = isnull(b.编制人数,0),
实际人数 = isnull(b.实际人数,0),
缺编人数 = isnull(b.编制人数,0)-isnull(b.实际人数,0),
人员减少 = isnull(b.人员减少,0),
人员增加 = isnull(b.人员增加,0)
from
Branch a
left join
(select
BranchCode,
编制人数 = sum(Budget)
from
Strength
group by
BranchCode) b,
on
a.Code = b.BranchCode
left join
(select
BranchCode,
实际人数 = count(*)
from
Employee
group by
BranchCode) c,
on
a.Code = b.BranchCode
left join
(select
e.Code,
人员减少 = sum(case FromBranchCode when e.Code then 1 else 0 end),
人员增加 = sum(case ToBranchCode when e.Code then 1 else 0 end)
from
Branch e,
EmployeeChange f
group by
e.Code) d
on
a.Code = d.Code
order by
a.Code
回复
子陌红尘 2005-07-18
select
部门 = a.Code,
编制人数 = isnull(b.编制人数,0),
实际人数 = isnull(b.实际人数,0),
缺编人数 = isnull(b.编制人数,0)-isnull(b.实际人数,0),
人员减少 = isnull(b.人员减少,0),
人员增加 = isnull(b.人员增加,0)
from
Branch a
left join
(select BranchCode,编制人数 = sum(Budget) from Strength group by BranchCode) b,
on
a.Code = b.BranchCode
left join
(select BranchCode,实际人数 = count(*) from Employee group by BranchCode) c,
on
a.Code = b.BranchCode
left join
(select
e.Code,
人员减少 = sum(case FromBranchCode when e.Code then 1 else 0 end),
人员增加 = sum(case ToBranchCode when e.Code then 1 else 0 end)
from
Branch e,EmployeeChange f
group by
e.Code) d
on
a.Code = d.Code
order by
a.Code
回复
发帖
应用实例
创建于2007-09-28

2.7w+

社区成员

MS-SQL Server 应用实例
申请成为版主
帖子事件
创建了帖子
2005-07-18 04:19
社区公告
暂无公告