访问查询中的条件有问题吗?

问题描述 投票:0回答:1

我正在尝试编写一个查询,运行时将检查记录是否逾期至少 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 表达式中对此进行了补偿,如果没有请纠正我。

我的查询结构如下图所示:

QueryStructure

上图的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 表达式的正确响应,如下所示: QueryOutput

我只想显示对表达式 OverdueBy10 的响应为 Yes 的记录。我尝试将 =Yes、="Yes"、="* Yes *"、Yes 和 Is Not Null 放入此字段的标准中,每次我这样做时都会要求输入到期日期。

我不确定为什么它要求提供此信息,任何人都可以帮助我理解原因,并帮助提供潜在的解决方案,即使最好的方法是使用 VBA?

提前致谢,

vba ms-access ms-access-query
1个回答
0
投票

不幸的是,您无法使用计算查询列 (

DueDate
) 在同一查询中进行进一步计算(或用于排序,如您在 SQL 中看到的那样)。

为了避免一遍又一遍地重复重要的计算,我建议:

  • 创建计算
    DueDate
  • 的基本查询
  • 基于第一个查询创建第二个查询。在这里,您可以根据需要使用
    DueDate
    - 进一步计算列、条件、排序。

如果您使用支持公共表表达式(CTE)的服务器数据库,这种事情就会变得容易得多。您可以在一个数据库视图中逐步执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.