【问题标题】:MS Access SQL IIF optimizationMS Access SQL IIF 优化
【发布时间】:2012-03-26 17:06:50
【问题描述】:

鉴于此表,我有一个查询,当另一列为 NULL 时,我使用 IIF 从一列中提取值。

COL_A,COL_B
NULL,10
12,NULL
14,NULL
NULL,16

SELECT iif(COL_A IS NULL, COL_B, COL_A);

Results:
10
12
14
16

我正在尝试解决的是如何在直接 SQL 中执行此操作。有没有办法做到这一点?通常我不介意使用这个几次,但是我们有一个带有 cough 86 条 IIF 语句的大量查询,并且运行起来令人望而却步。有什么想法吗?

【问题讨论】:

    标签: sql ms-access query-optimization


    【解决方案1】:

    您可以使用NZ()

     select nz(COL_A, COL_B)
    

    【讨论】:

    • 如果您要测试多个字段以查看其是否为空怎么办?
    • @DanChampagne - nz(nz(COL_A, COL_B), COL_C)
    • 问题是如何优化具有 86 个独立 IIF 的查询,将它们更改为 Nz 应该不会显着改善这一点。
    【解决方案2】:

    如果您的查询需要在一个查询中执行 86 个不同的测试,那么我建议数据架构存在缺陷,您可以通过使用“Case”方法编写自定义函数来缩短 SQL,该方法可以逐步完成所有验证并返回一个结果。但是,这只会改善 SQL 的外观,并不会真正提高性能。很难说没有 86 个 IIF 的列表,但我认为您需要查看您的数据结构,看看您是否可以从表级别改进。

    【讨论】:

      【解决方案3】:

      假设只有一列具有实际值,您可以将它们连接起来,因为空值会被压缩。 选择COL_A||COL_B||COL_C||COL_D||....

      【讨论】:

      • +1 表示概念。使用 Access 的数据库引擎,使用 & 号而不是竖线进行连接:Select COL_A & COL_B & COL_C & COL_D & ....
      猜你喜欢
      • 1970-01-01
      • 2017-12-25
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 2020-11-23
      • 1970-01-01
      • 2014-04-17
      • 2020-12-05
      相关资源
      最近更新 更多