【问题标题】:How to Query attendance on MS-ACCESS如何在 MS-ACCESS 上查询考勤
【发布时间】:2018-08-25 18:26:47
【问题描述】:

我想用一张桌子从 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 

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

【问题讨论】:

  • 您的表是否有 ID 来帮助保持这些记录有序?
  • 是的@Chris 确实如此
  • 我还假设 emp_mode 是时钟输入和输出? 5 = 进 4 = 出?
  • @Chris 是的,你是对的..这是打卡和打卡模式

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


【解决方案1】:

请记住,使用 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 语句。

【讨论】:

  • 不客气。如果这是您问题的解决方案,请将此帖子标记为已回答。
  • 嗨,克里斯,我尝试在我的访问权限上执行查询,看来 HourCalc 一定有问题
  • 嗨,克里斯,我尝试在我的 C# 上修改您的示例中的某些内容,但它给了我一个错误“FROM 子句的语法错误”下面是我的代码。
  • SelectHourCalc.emp_id,HourCalc.emp_name,HourCalc.StartDateTime,HourCalc.EndDateTime," + "DateDiff('n',[StartDateTime],[EndDateTime])/60 AS HrsWorked FROM (选择 t1. emp_id,t1.emp_name," + "CDATE([emp_date] + [emp_time]) AS StartDateTime,(Select MIN(CDATE([t2.emp_date]+[t2.emp_time])) 从 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 t1 WHERE
  • ((((emp_mode)=5))) AS HourCalc" + " AND t1.emp_date between #" + dtFromDate.Value.Date.ToString("yyyyMMdd") + "# AND #" + dtToDate.Value.Date.ToString("yyyyMMdd")+"#";
猜你喜欢
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
相关资源
最近更新 更多