如果参数为空,如何使查询条件选择所有内容

Posted

技术标签:

【中文标题】如果参数为空,如何使查询条件选择所有内容【英文标题】:How to make a query criteria select everything If the parameter is blank 【发布时间】:2017-07-19 20:45:35 【问题描述】:

我有一个表单,它有一个名为 [Supp] 的组合框,它从名为 [Supplier] 的表列中提取。

同时,我正在过滤与日期范围为 [Text6](Starting Date) 和 [Text7](Ending Date) 的记录关联的日期

我正在尝试使供应商过滤器成为可选,只要您将 [Supp] 留空/空,它就会选择所有供应商。

问题是,每当我将 [Supp] 留空时,它似乎超出了日期范围过滤器并选择所有可用记录,而不管日期如何。我认为这很可能是因为我使用的是“OR”。

SQL Code

SELECT [Table Material Label].Serial, [Table Material Label].[Date Recieved], [Table Material Label].MaterialDescription, [Table Material Label].MaterialCode, [Table Material Label].Supplier, 

[Table Material Label].[Lot Number], [Table Material Label].Weight, [Table Material Label].Quantity, [Table Material Label].[Purchase Order Number], [Table Material Label].[Received By], [Table Material Label].[Checked in By], [Table Material Label].[Total Weight]

FROM [Table Material Label]

WHERE ((([Table Material Label].[Date Recieved])>=[Forms]![Report Generator]![Text6] 
    And ([Table Material Label].[Date Recieved])<=[Forms]![Report Generator]![Text7]) 
    AND (([Table Material Label].Supplier)=IIf([forms]![Report Generator]![Supp].[Value]="*",([Table Material Label].[Supplier])='*',([Table Material Label].[Supplier])=[Forms]![Report Generator]![Supp].[Value])))


ORDER BY [Table Material Label].[Date Recieved], [Table Material Label].MaterialDescription, [Table Material Label].MaterialCode, [Table Material Label].Supplier;

总而言之 - 我正在尝试按日期范围和供应商进行过滤的查询。但如果供应商标准为空白,我希望它不过滤供应商。如果不破坏日期范围过滤器,我将无法执行此操作。

任何帮助将不胜感激。谢谢。

成品,感谢 Andre 的解决方案:

SELECT [Table Material Label].Serial, [Table Material Label].[Date Recieved], [Table Material Label].MaterialDescription, [Table Material Label].MaterialCode, [Table Material Label].Supplier, 

[Table Material Label].[Lot Number], [Table Material Label].Weight, [Table Material Label].Quantity, [Table Material Label].[Purchase Order Number], [Table Material Label].[Received By], [Table Material Label].[Checked in By], [Table Material Label].[Total Weight]

FROM [Table Material Label]

WHERE  (([Table Material Label].[Date Recieved])>=[Forms]![Report Generator]![Text6] 
    And ([Table Material Label].[Date Recieved])<=[Forms]![Report Generator]![Text7]) 
    AND ([Table Material Label].Supplier = [Forms]![Report Generator]![Supp] 
    OR [Forms]![Report Generator]![Supp] IS NULL)

ORDER BY [Table Material Label].[Date Recieved], [Table Material Label].MaterialDescription, [Table Material Label].MaterialCode, [Table Material Label].Supplier;

【问题讨论】:

【参考方案1】:

看这里:https://***.com/a/38899574/3820271

AND ([Table Material Label].Supplier = [Forms]![Report Generator]![Supp] 
     OR [Forms]![Report Generator]![Supp] IS NULL)

如果供应商标准为空,则此 AND 部分将始终为真。

【讨论】:

感谢十亿安德烈,工作就像一个魅力。令人惊讶的是,有多少组织代码可以帮助您发现错误。

以上是关于如果参数为空,如何使查询条件选择所有内容的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server中如果查询条件为空,则查询全部,如何实现?

选择所有 3 列同时不为空的位置(Laravel 查询生成器)

如何根据在表单上的组合框控件中输入的内容从查询中选择所有记录

如何检查值是不是在列表中或列表是不是为空?

关于SQL多条件查询问题: 若其中一条件为空值如何设置忽略该条件而用其它条件组合查询??

根据多个组合框过滤查询,但如果组合框为空,则显示所有记录,包括空,