我想查询一个仅显示在各个日期缺勤的员工的记录。
我在MS Access 2010中有两个查询。一个是 qAllDatesAllEmp ,其中包含所有员工的所有月度日期。第二个是 qDailyWorkEmp ,它按日期显示员工的工作情况。现在,假设Emp1仅缺少一个日期5-Jan-2019
; emp2缺少15-Jan-2019
,依此类推,结果应仅显示这些缺少员工姓名的日期。到目前为止,我已经尝试将日期字段从 qAllDatesAllEmp 加入到 qDailyWorkEmp 中的日期字段,并且将连接箭头从 qAllDatesAllEmp 指向 qDailyWorkEmp 。我还将 qDailyWorkEmp 中的日期字段添加到下面的查询网格中,但删除了复选标记。当我运行此查询时,它给出空白结果。我非常欢迎专家帮助您如何在下面获得所需的输出。
我的样本数据:
Query1: qAllDatesAllEmp contains {WorkDate; empID; empName; CityBased}
Query2: qDailyWorkEmp contains {DailyDate; empID; empName; CityBased}
SQL如下:
SELECT qDailyWorkEmp.empID, qDailyWorkEmp.empName, qDailyWorkEmp.CityBased
FROM qAllDatesAllEmp LEFT JOIN
qDailyWorkEmp
ON qAllDatesAllEmp.WorkDate = qDailyWorkEmp.DailyDate
WHERE (((qDailyWorkEmp.DailyDate) Is Null));
我想要的输出:
empID; EmpName; MissingDate
001; ABC; 5-Jan-2019
007; LMN; 15-Jan-2019
...and so on
答案 0 :(得分:0)
从我可以从您的问题中收集到的信息来看,left join
查询似乎处于正确的轨道,但是,由于qAllDatesAllEmp
查询包含主数据,因此您应该输出数据从该查询中查询在您的qDailyWorkEmp
查询中对应值为空的记录。
您在此行中的查询中也可能出现错字:
qAllDatesAllEmp.WhatDate = qDailyWorkEmp.DailyDate
正如您在问题中所述,查询qAllDatesAllEmp
包含以下字段:
Query1: qAllDatesAllEmp contains {WorkDate; empID; empName; CityBased}
WhatDate
不是这些字段之一。
您还需要在两个查询中都加入empID
字段,以便您以每位员工为基础比较日期字段,而不是将每个日期与所有员工的日期-因此,您的加入条件应为:
qAllDatesAllEmp LEFT JOIN qDailyWorkEmp ON
qAllDatesAllEmp.WorkDate = qDailyWorkEmp.DailyDate AND
qAllDatesAllEmp.empID = qDailyWorkEmp.empID
根据提供的信息,我可能建议以下内容:
SELECT
qAllDatesAllEmp.empID,
qAllDatesAllEmp.empName,
qAllDatesAllEmp.CityBased
qAllDatesAllEmp.WorkDate as MissingDate
FROM
qAllDatesAllEmp LEFT JOIN qDailyWorkEmp ON
qAllDatesAllEmp.WorkDate = qDailyWorkEmp.DailyDate AND
qAllDatesAllEmp.empID = qDailyWorkEmp.empID
WHERE
qDailyWorkEmp.DailyDate IS NULL