我正在尝试编写一个查询,运行时将检查记录是否逾期至少 10 天,如果是则显示它,如果不是则不显示。但是,我遇到了其中一个字段的标准字段的问题
我有一个自定义字段,用于计算到期日期并计算当前是否逾期 10 天或更长时间。表达式如下:
截止日期:
DueDate: DateAdd("d",Switch([Priority]="A - 24 hours",1,[Priority]="A- 24 hours",1,[Priority]="B - 72 hours",3,[Priority]="B- 72 hours",3,[Priority]="C - 5 working days",5,[Priority]="C- 5 days",5,[Priority]="D > 5 working days",14,[Priority]="D > 5 days",14,[Priority]="0-Urgent",-365),[Received])
逾期10:
OverdueBy10: IIf([Priority]="0-Urgent",IIf(DateDiff("d",[DueDate],Date())-365>=10,"Yes",""),IIf(DateDiff("d",[DueDate],Date())>=10,"Yes",""))
就上下文而言,我的紧急样本的截止日期为 365 天,因此它将它们过滤到顶部以获取另一种表格。我相信我已经在 OverdueBy10 表达式中对此进行了补偿,如果没有请纠正我。
我的查询结构如下图所示:
上图的SQL:
SELECT [Sample Submission].[Lab Batch ID]
,[Sample Submission].[IRIS Batch ID]
,[Sample Submission].Requester
,[Sample Submission].Samples
,[Sample Submission].Runs
,[Sample Submission].Method
,[Sample Submission].[Instrument Specific]
,[Sample Submission].Priority
,DateAdd("d", Switch([Priority] = "A - 24 hours", 1, [Priority] = "A- 24 hours", 1, [Priority] = "B - 72 hours", 3, [Priority] = "B- 72 hours", 3, [Priority] = "C - 5 working days", 5, [Priority] = "C- 5 days", 5, [Priority] = "D > 5 working days", 14, [Priority] = "D > 5 days", 14, [Priority] = "0-Urgent", - 365), [Received]) AS DueDate
,[Sample Submission].[Drop-Off date]
,[Sample Submission].Comments
,[Sample Submission].Received
,[Sample Submission].Started
,[Sample Submission].Finished
,IIf([Priority] = "0-Urgent", IIf(DateDiff("d", [DueDate], DATE ()) - 365 >= 10, "Yes", ""), IIf(DateDiff("d", [DueDate], DATE ()) >= 10, "Yes", "")) AS OverdueBy10
FROM [Sample Submission]
WHERE (
(([Sample Submission].Method) LIKE "*CFPP*")
AND (([Sample Submission].Received) IS NOT NULL)
AND (([Sample Submission].Finished) IS NULL)
)
ORDER BY DateAdd("d", Switch([Priority] = "A - 24 hours", 1, [Priority] = "A- 24 hours", 1, [Priority] = "B - 72 hours", 3, [Priority] = "B- 72 hours", 3, [Priority] = "C - 5 working days", 5, [Priority] = "C- 5 days", 5, [Priority] = "D > 5 working days", 14, [Priority] = "D > 5 days", 14, [Priority] = "0-Urgent", - 365), [Received])
,[Sample Submission].Received
,[Sample Submission].Started DESC;
当结构与上图中所示完全相同时,它运行得非常好。但是,它会显示满足查询中定义的条件的每条记录,并填写对 OverdueBy10 表达式的正确响应,如下所示:
我只想显示对表达式 OverdueBy10 的响应为 Yes 的记录。我尝试将 =Yes、="Yes"、="* Yes *"、Yes 和 Is Not Null 放入此字段的标准中,每次我这样做时都会要求输入到期日期。
我不确定为什么它要求提供此信息,任何人都可以帮助我理解原因,并帮助提供潜在的解决方案,即使最好的方法是使用 VBA?
提前致谢,
本
不幸的是,您无法使用计算查询列 (
DueDate
) 在同一查询中进行进一步计算(或用于排序,如您在 SQL 中看到的那样)。
为了避免一遍又一遍地重复重要的计算,我建议:
DueDate
DueDate
- 进一步计算列、条件、排序。如果您使用支持公共表表达式(CTE)的服务器数据库,这种事情就会变得容易得多。您可以在一个数据库视图中逐步执行此操作。