应出勤人数/实出勤数量=出勤率,要怎么写数据库

——应出勤人数

SELECT d.depart_name,count(a.emp_id) as 个数

FROM  employee a

left join (select  case ctype when '0' then '固定期限' when '1' then '无固定期限' else '其他' end as 合同类别,* from contact) b on a.emp_id=b.emp_id and b.status=1 

left join Degrees c on a.edu_id=c.degree_id 

left join Departs d  on left(a.depart_id,7)=d.depart_id

where work_status=1 AND LEFT(a.depart_id,7)='0080101' AND a.depart_id<>'0080101'

group by d.depart_name

——实出勤人数

SELECT c.depart_name,count(DISTINCT a.emp_id) as 个数

FROM dbo.TimeRecords a

INNER JOIN dbo.employeeinfo b ON a.emp_id=b.emp_id

INNER JOIN dbo.Departs c ON LEFT(b.depart_id, 9)=c.depart_id

WHERE CONVERT(VARCHAR(10), a.sign_time, 120)=CONVERT(VARCHAR(10), GETDATE(), 120)

AND LEFT(b.depart_id,7)='0080101' AND b.depart_id<>'0080101'

GROUP BY c.depart_name

FineReport 用户bmXwf6959003 发布于 2022-5-10 11:47
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-5-10 11:49(编辑于 2022-5-10 11:50)

公式是不是给错了??假设应出勤100,实出勤80 那100/80 岂不是出勤率很高

SELECT B.个数/A.个数*1.0 FROM(

SELECT d.depart_name,count(a.emp_id) as 个数

FROM  employee a

left join (select  case ctype when '0' then '固定期限' when '1' then '无固定期限' else '其他' end as 合同类别,* from contact) b on a.emp_id=b.emp_id and b.status=1 

left join Degrees c on a.edu_id=c.degree_id 

left join Departs d  on left(a.depart_id,7)=d.depart_id

where work_status=1 AND LEFT(a.depart_id,7)='0080101' AND a.depart_id<>'0080101'

group by d.depart_name

) A INNER JOIN (

——实出勤人数

SELECT c.depart_name,count(DISTINCT a.emp_id) as 个数

FROM dbo.TimeRecords a

INNER JOIN dbo.employeeinfo b ON a.emp_id=b.emp_id

INNER JOIN dbo.Departs c ON LEFT(b.depart_id, 9)=c.depart_id

WHERE CONVERT(VARCHAR(10), a.sign_time, 120)=CONVERT(VARCHAR(10), GETDATE(), 120)

AND LEFT(b.depart_id,7)='0080101' AND b.depart_id<>'0080101'

GROUP BY c.depart_name

) B ON A.depart_name=B.depart_name

最佳回答
0
意气Lv7初级互助
发布于2022-5-10 11:50(编辑于 2022-5-10 11:55)

select depart_name,sum(应出勤人数) / sum(实出勤人数) as 出勤率 (

SELECT d.depart_name,count(a.emp_id) as 应出勤人数, 0 实出勤人数

FROM  employee a

left join (select  case ctype when '0' then '固定期限' when '1' then '无固定期限' else '其他' end as 合同类别,* from contact) b on a.emp_id=b.emp_id and b.status=1 

left join Degrees c on a.edu_id=c.degree_id 

left join Departs d  on left(a.depart_id,7)=d.depart_id

where work_status=1 AND LEFT(a.depart_id,7)='0080101' AND a.depart_id<>'0080101'

group by d.depart_name

union all

SELECT c.depart_name,0 应出勤人数,count(DISTINCT a.emp_id) as 实出勤人数

FROM dbo.TimeRecords a

INNER JOIN dbo.employeeinfo b ON a.emp_id=b.emp_id

INNER JOIN dbo.Departs c ON LEFT(b.depart_id, 9)=c.depart_id

WHERE CONVERT(VARCHAR(10), a.sign_time, 120)=CONVERT(VARCHAR(10), GETDATE(), 120)

AND LEFT(b.depart_id,7)='0080101' AND b.depart_id<>'0080101'

GROUP BY c.depart_name

) a

group by depart_name

  • 2关注人数
  • 245浏览人数
  • 最后回答于:2022-5-10 11:55
    请选择关闭问题的原因
    确定 取消
    返回顶部