我有三个与此特定查询相关的表:
LawsonID
(pk),LastName
,FirstName
,AccCode
(数字)AccCode
(pk),AccCode2
(不要问,HR设置),DisplayName
EmpID
(pk),ACLS
(日期),EP
(日期),CPR
(日期),CPR_Imported
(日期), PALS
(日期),Note
目标是获取我需要报告的所有数据,这些数据已经在一个或多个认证中过期,或者将在未来90天内过期。
一些重要的注释:
2010-08-31
作为占位符,因为它是在发布此问题时的结果。这是我到目前为止的查询,它给了我很好的数据:
SELECT
iEmp.LawsonID, iEmp.LastName, iEmp.FirstName,
dept.AccCode2, dept.DisplayName,
Exp.ACLS, Exp.EP, Exp.CPR, Exp.CPR_Imported, Exp.PALS, Exp.Note
FROM (Lawson_Employees AS iEmp
LEFT JOIN Lawson_DeptInfo AS dept ON dept.AccCode = iEmp.AccCode)
LEFT JOIN tblExpirationDates AS Exp ON iEmp.LawsonID = Exp.EmpID
WHERE iEmp.CurrentEmp = 1
AND ((Exp.ACLS <= #2010-08-31#
AND Exp.ACLS IS NOT NULL)
OR (Exp.CPR <= #2010-08-31#
AND Exp.CPR_Imported <= #2010-08-31#)
OR (Exp.PALS <= #2010-08-31#
AND Exp.PALS IS NOT NULL))
ORDER BY dept.AccCode2, iEmp.LastName, iEmp.FirstName;
在仔细阅读结果集后,我想我错过了应该在结果集中的一些过期日期。我错过了什么吗?这是该部门唯一的开发人员的糟糕部分......没有人要求一点帮助。
答案 0 :(得分:0)
我认为问题在于:
OR (Exp.CPR <= #2010-08-31#
AND Exp.CPR_Imported <= #2010-08-31#)
Null不小于或大于任何东西。
如果您需要没有有效CPR的人,则需要包含空值。
使用Nz可能最简单:
OR (Nz(Exp.CPR,#2010-08-31#) <= #2010-08-31#
AND Nz(Exp.CPR_Imported,#2010-08-31#) <= #2010-08-31#)