三张表联合查询

部门表(deptcode:部门编号,deptname:部门名称)员工表(humancode:员工编号,humanname:员工姓名,deptcode:部门编号)考核表(r... 部门表(deptcode:部门编号,deptname:部门名称)
员工表(humancode:员工编号,humanname:员工姓名,deptcode:部门编号)
考核表(resultcode:结果编号,humancode:人员编号,kpicode:考核结果---分 不合格,合格,优秀)
1.统计各部门合格的人数;
2.统计考核结果情况;
3.统计部门考核结果情况;
求sql
展开
 我来答
天极宇智波
2012-12-28 · TA获得超过426个赞
知道小有建树答主
回答量:358
采纳率:100%
帮助的人:179万
展开全部
第一:统计各部门合格的人数(我这个能统计出所有人员的)
由于你未能给出 考核结果为 多少分算,不合格,合格,优秀
我自定义一个标准你修改一下就行
小于60分为:不合格
大于等于60小于80为:合格
大于等于80小于100为优秀
select 部门表.deptname,sum(员工表.humancode),
---case when 考核表.kpicode<60 then '不合格' else '0' end as Nopass,
---case when 考核表.kpicode>=60 and 考核表.kpicode<80 then '合格' else '0' end as pass,
---case when 考核表.kpicode>=80 and 考核表.kpicode<100 then '合格' else '0' end as good
(如果只统计合格以上的就使用:
case when 考核表.kpicode>=60 then '合格' else '0' end as pass,
这条语句就可以了)
from 部门表,员工表,考核表
where 部门表.deptcode=员工表.deptcode and 员工表.humancode=考核表的.humancode
group by
部门表.deptname,Nopass, pass,good
第二:统计考核结果情况;(统计出有多少人合格,不合格,优秀)
select sum(humancode) ,
case when kpicode<60 then '不合格' else '0' end as Nopass,
case when kpicode>=60 and 考核表.kpicode<80 then '合格' else '0' end as pass,
case when kpicode>=80 and 考核表.kpicode<100 then '合格' else '0' end as good
from 考核表
group by
Nopass,pass,good
第三:统计部门考核结果情况;(按照部门统计出员工的姓名,考核分数,考核结果)
select 部门表.deptname,员工表.humanname,考核表.kpicode,
case when 考核表.kpicode<60 then '不合格' else '0' end as Nopass,
case when 考核表.kpicode>=60 and 考核表.kpicode<80 then '合格' else '0' end as pass,

case when 考核表.kpicode>=80 and 考核表.kpicode<100 then '合格' else '0' end as good
from 部门表,员工表,考核表 where 部门表.deptcode=员工表.deptcode and 员工表.humancode=考核表的.humancode
group by
部门表.deptname,员工表.humanname,考核表.kpicode,Nopass,pass,good
救火队员
推荐于2017-09-11
知道答主
回答量:36
采纳率:0%
帮助的人:19万
展开全部
1.
SELECT COUNT(*),C.deptname
FROM 考核表 A
inner join 员工表 B on A.humancode=B.humancode
inner join 部门表 C on B.deptcode=C.deptcode
where A.kpicode<>'不合格'
2.统计各部门所有员工的考核情况
SELECT A.*,B.*,C.*
FROM 考核表 A
inner join 员工表 B on A.humancode=B.humancode
inner join 部门表 C on B.deptcode=C.deptcode
第三题问题不明确,是统计各部门合格与不合格人数还是什么?
追问
第三题是:

部门 合格 不合格 优秀
测试部 1 2 0
开发部 3 0 2
追答
SELECT COUNT(*),A.kpicode,C.deptname
FROM 考核表 A
inner join 员工表 B on A.humancode=B.humancode
inner join 部门表 C on B.deptcode=C.deptcode
group by ,C.deptname,A.kpicode

修正第一题的错误,改为
SELECT COUNT(*),C.deptname
FROM 考核表 A
inner join 员工表 B on A.humancode=B.humancode
inner join 部门表 C on B.deptcode=C.deptcode
where A.kpicode'不合格'
group by ,C.deptname
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-12-28
展开全部
1、select count(*) as 人数 from 考核表 where kpicode='合格'
2、select b.humanname,kpicode from 考核表 as a inner join 员工表 as b on a.humancode=b.humancode
3、select c.deptname,count(*) as 人数
from 考核表 as a
inner join 员工表 as b
on a.humancode=b.humancode
inner join 部门表 as c on b.deptcode=c.deptcode
group by kpicode
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
您可能需要的服务
百度律临官方认证律师咨询
平均3分钟响应 | 问题解决率99% | 24小时在线
立即免费咨询律师
18502人正在获得一对一解答
西安夜猫子4分钟前提交了问题
福州梦中仙子3分钟前提交了问题
沈阳星空之梦5分钟前提交了问题
下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消
还有疑问? 马上咨询36302位在线律师,3分钟快速解答
立即免费咨询律师

辅 助

模 式