如何在MS Access 2010查询中仅显示所有缺席日期?

时间:2019-01-16 07:58:49

标签: sql ms-access-2010

我想查询一个仅显示在各个日期缺勤的员工的记录。

我在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

1 个答案:

答案 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