访问查询以查找未在一系列日期内进行测试的人

时间:2017-03-27 20:33:15

标签: ms-access

我希望有人可以帮助我解决Access中可能无法实现的查询。

我有一张包含所有员工的表格和一个查询,显示在18个月左右的时间内测试并且不断增长的所有人。
我试图找出如何在访问中进行查询,以显示员工在一系列日期内未对各个日期进行测试的情况。例如,如果我创建日期10/1/17 - 10/14/17的查询,那么我希望的结果是Jim没有在10/1和10/5上测试而且乔没有做过测试于10/12。

它适用于单个日期,因为它只将单个日期查询的结果与employee表进行比较,而不是两者都没有进行测试,但仅针对该日期。

这是单日“未测试”查询的SQL视图:

SELECT ESD_EMP_BADGE.LAST_NAME, ESD_EMP_BADGE.FIRST_NAME, ESD_EMP_BADGE.EMPID, ESD_EMP_BADGE.DEPT
FROM ESD_EMP_BADGE LEFT JOIN Yesterday ON ESD_EMP_BADGE.[EMPID] = Yesterday.[EMPID] 
WHERE (((ESD_EMP_BADGE.DEPT) Not Like "EXE") AND ((Yesterday.EMPID) Is Null));  

对于范围,我不能以与单日期查询相同的方式执行此操作,因为如果该人在查询范围内的某个时间进行测试,则该范围内的单个测试将使该人看起来像是针对所有日期进行测试的。
有没有办法在单个查询中单独考虑每个日期?
在employee表中只有一个字段可以保证是唯一的,该字段也在测试记录“EMPID”中。 employee表中没有日期字段。
我希望这是一个明确的解释。我想我可能会超越Access所能做的。

1 个答案:

答案 0 :(得分:0)

如果我正确理解您所寻找的内容 - 您首先需要一个包含所有可能的员工组合和测试日期的数据集。可以使用包含员工和没有join子句的测试表的查询生成此数据集。这是一个笛卡尔记录关系 - 每个表中的每个记录都与另一个表中的每个记录相连接 SELECT Employees.EmpID, EmpTests.TestDate FROM Employees, EmpTests;

然后将该查询加回测试表。

SELECT Query1.EmpID, Query1.TestDate, EmpTests.TestDate
FROM EmpTests RIGHT JOIN Query1 ON (EmpTests.TestDate = Query1.TestDate) AND (EmpTests.EmpID = Query1.EmpID)
WHERE (((Query1.TestDate) Between [start date] And [end date]) AND ((EmpTests.TestDate) Is Null));