使用SQL语句获取考勤记录

时间:2015-08-12 20:07:24

标签: mysql sql-server

我试图创建一个sql来生成一个出勤报告,以确定缺席,迟到,不完整的登录和继承。下面是我使用的虚拟表。

 Employee 

    Employee ID        Name
      001                Paul  
      002                Juan  
      003                Elise   

 Schedule 

    ID EmployeeID   Schedule 
    1     001       11:00PM - 8:00AM   
    2     002       11:00PM - 8:00AM  
    3     003       11:00PM - 8:00AM


    Attendance  

    ID  EmployeeID    Type       Datetime     
    1     001          0          2015-07-25 22:00:00
    2     002          0          2015-07-25 22:48:00
    3     003          0          2015-07-25 20:48:00  
    1     001          1          2015-07-25 08:00:00 
    2     002          1          2015-07-25 08:44:00
    3     003          1          2015-07-25 08:00:00  

我的sql

SELECT * FROM Employee 
INNER JOIN Schedule ON Employee.EmployeeID = Schedule.EmployeeID 
INNER JOIN Attendance ON Employee.EmployeeID = Attendance.EmployeeID 
CASE WHEN Schedule.Schedule < Attendance.DateTime THEN 1 as Late;

这是我的sql,但我不确定它是否正确。从那以后它会加1。我使用type列来确定登录和注销,其中1是注销,0是登录。另外我们如何才能在定义日期,例如,2015-07-20到2015-07-25之间获得总计。有帮助吗?

1 个答案:

答案 0 :(得分:0)

这里有点猜测因为没有什么可以解决的。我建议您不要习惯在不同的表中更改给定信息的列名。 EmployeeID应该始终是EmployeeID。

这样的事情会让你指向正确的方向。

select e.EmployeeID
    , e.Name
    , SUM(Case when s.Schedule < a.DateTime THEN 1 else 0 end) as TotalLate
    , SUM(case when a.DateTime is null then 1 else 0 end) as TotalAbsent
from Employee e
join Schedule s on s.EmployeeID = e.ID
left join Attendance a on a.EmployeeID = e.ID and a.ID = s.ID
相关问题