如何在MS-ACCESS上查询出勤率

时间:2018-08-25 18:26:48

标签: ms-access-2007 ms-access-2013 ms-access-2003

我想从ms-access上查询一张表的出勤情况,并计算工作时间:

emp_id  emp_name  emp_date  emp_time emp_dept    emp_mode  
1       mike      20140819  201040    security       5
1       mike      20140820  051005    security       4 
2       tess      20140819  074910    hr             5
2       tess      20140819  171011    hr             4

现在,我要这样显示它们:

emp_id  emp_name  emp_date           time-in  time-out  HrsWork
1       mike      20140819-20140820  210010   051005    9
2       tess      20140819-20140819  075910   171011    10 

任何帮助将不胜感激。谢谢

1 个答案:

答案 0 :(得分:0)

请记住,使用ctrl + k将允许您使用代码行键入内容,这将有助于您使内容保持一致。

之所以这样说,是因为我花了一个小时才能完全理解您在顶部发布的内容。下面的行:

emp_id emp_name emp_date emp_time emp_dept emp_mode 1迈克20140819 201040安全5 1迈克20140820 051005安全4 2 tess 20140819 074910 hr 5 2 tess 20140819 171011 hr 4

应翻译为:

emp_id emp_name emp_date    emp_time      emp_dept        emp_mode
1       mike    2014/08/19  20:10:40      security         5 
1       mike    2014/08/20  05:10:05      security         4 
2       tess    2014/08/19  07:49:10      hr               5 
2       tess    2014/08/19  17:10:11      hr               4

然后,这让我对您要完成的工作有了更好的了解。

但是我们都生活和学习。我认为您正在寻找类似以下SQL语句的内容。

SELECT HourCalc.emp_id, HourCalc.emp_name, HourCalc.StartDateTime, HourCalc.EndDateTime, DateDiff('n',[startdatetime],[enddatetime])/60 AS HrsWorked
FROM (SELECT t1.emp_id, t1.emp_name, CDate([emp_date] & ' ' & [emp_time]) AS StartDateTime, 
           (SELECT MIN(cdate(t2.emp_date & ' ' & t2.emp_time))
            FROM emptable t2
            WHERE t2.Emp_id = t1.Emp_ID
            AND cdate(t2.emp_date & ' ' & t2.emp_time) > cdate(t1.emp_date & ' ' & t1.emp_time)
            AND emp_mode = '4') AS EndDateTime
      FROM emptable AS t1
      WHERE (((emp_mode) = '5'))) as HourCalc;

在每个where子句中,如果您的emp_mode是数字字段数据类型,则只需删除数字4和5周围的单引号即可。

这可能不是您在问题中发布的确切布局,但它应该使您走上正确的轨道。

如果这不起作用,请告诉我,我们可以做更多的挖掘工作,以找到您要查找的正确SQL语句。