我要的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的记录数。
...全文
114 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧