如何在MS-ACCESS上查询考勤
How to Query attendance on MS-ACCESS
我想从 ms-access 查询一个 table 的出勤并计算工时数:
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
如有任何帮助,我们将不胜感激。谢谢
请记住,使用 ctrl+k 将允许您使用代码行键入,这将帮助您保持排列整齐。
我这样说是因为我花了大约一个小时才完全理解您在顶部发布的内容。下面一行:
emp_id emp_name emp_date emp_time emp_dept emp_mode
1 迈克 20140819 201040 安全 5 1 迈克 20140820 051005 安全 4 2 苔丝 20140819 074910 小时 5 2 苔丝 20140819 171011 小时 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 语句。
我想从 ms-access 查询一个 table 的出勤并计算工时数:
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
如有任何帮助,我们将不胜感激。谢谢
请记住,使用 ctrl+k 将允许您使用代码行键入,这将帮助您保持排列整齐。
我这样说是因为我花了大约一个小时才完全理解您在顶部发布的内容。下面一行:
emp_id emp_name emp_date emp_time emp_dept emp_mode 1 迈克 20140819 201040 安全 5 1 迈克 20140820 051005 安全 4 2 苔丝 20140819 074910 小时 5 2 苔丝 20140819 171011 小时 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 语句。