【问题标题】:MS ACCESS 2016 - Criteria for Query using NullMS ACCESS 2016 - 使用 Null 进行查询的标准
【发布时间】:2017-01-31 10:17:36
【问题描述】:

请帮忙,我遇到了以下问题: 我在 MS access 2016 中有一个表,其中包含以下数据:

字段 空值 空值 空值 21 21 空

我的目标是在我的条件为 21 时返回等于 21 的记录,但如果我的条件是例如 22 或不在该字段中的任何其他数字,我只想返回空记录 - 我已经尝试过 IIF( [Field]=21,21,Null) 如果条件为 21,则可以正常工作,但不返回任何记录 IIF([Field]=22,22,Null)

我怀疑嵌套的 IIF 语句可能会有所帮助,但到目前为止还没有成功

任何帮助将不胜感激

【问题讨论】:

  • 如果您尝试 IIF([Field]=22 AND NOT(IsNull([Field])),22,Null) 会怎样?
  • 谢谢,但是没有用,我也一直在尝试 SWITCH 功能,但结果也不尽如人意 - SWITCH([Field]=22,22,[Field]=Null, Null,true,空)无济于事

标签: sql ms-access


【解决方案1】:

Where 子句应改为:

WHERE Field = [Criteria] or (IsNull(Field) And Not Exists (select * from Table where Field = [Criteria])=True)

【讨论】:

  • 感谢您的建议,但这似乎也不起作用,产生与 if 语句相同的结果 - 也许我需要稍后在代码中处理该问题,使用自定义函数或调查 if表中有空值的替代方法
  • 嗯。访问有点挑剔!试试这个:WHERE Field = [Criteria] or (IsNull(Field) And Not Exists (select * from Table where Field = [Criteria])=True) [原始答案已编辑以反映此更改]
【解决方案2】:

您的问题似乎是 (Field = Null) 不等于 (Field is Null),因此它不能在 IIf 子句中使用,您需要一个额外的条件来获取空值。我在 MS Access sql 编辑器中使用以下 SQL 代码实现了预期的结果,但是当我选择设计器视图时,如果您不介意,它会在两个条件条件下“拆分”。试试看是否适合你

SELECT *
FROM Table1
WHERE
Table1.Field1 = [Criteria] 
or
Table1.Field1 is null and 
not exists
(SELECT *
FROM Table1
WHERE
Table1.Field1 = [Criteria])

【讨论】:

    【解决方案3】:

    感谢大家的帮助,我认为“不退出(选择 ...)”可以正常工作,但还有许多其他条件适用于表中的其他字段,因此第二个 select 语句会变得太大(对我来说!) - 但是我的解决方案如下

    由于我使用 SQL where 子句作为在 VBA 中调用的记录集的条件,我使用 dcount 函数来查看条件 =21 是否在数据集中,然后使用 if 语句调用一个基于[Filed]=21 和另一个如果 [Field] 为空 - 不性感但效果很好

    抱歉格式化和所有错别字 - 我在这里的第一篇文章

    【讨论】:

      猜你喜欢
      • 2020-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多