【问题标题】:Combining Conditions in Access SQL QueryAccess SQL 查询中的组合条件
【发布时间】:2021-07-23 21:30:22
【问题描述】:

我需要在 Access 中创建一个 SQL 查询,该查询根据特定的源值从一系列数字中选择一个值。但是,有一个特殊的逻辑怪癖。如果表中的数字低于源值,则查询应返回等于或小于源值的最大数字。但是,如果源值低于表中的所有值,则查询应返回表中的最小值。 换句话说,如果表中的值是

2000
1900
1800
1700 源值为 1975,查询应返回 1900;但如果源值为 1632,则查询应返回 1700。如果第一个条件失败,则查询应仅返回满足一个条件或另一个条件的单个值。
我不确定如何在 Access SQL 中组合这两个条件,并且在这里我找不到类似的问题。提前感谢您的帮助。

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    您可以使用条件聚合:

    select nz(max(iif(col <= 1975, col, null)),
              min(col)
             )
    from t;
    

    1975 是您要测试的任何值。

    【讨论】:

    • 感谢简洁的回复。不过,看起来我们缺少一个紧密的括号。 IIF 中应该有另一个 arg 吗?
    【解决方案2】:

    您可以使用条件排序然后选择第一行:

    SELECT TOP 1 col
    FROM tablename
    ORDER BY (col <= 1975), ABS(col - 1975)
    

    col &lt;= 1975 表达式 col &lt;= 1975 被评估为 -10 被评估为 false,因此小于或等于 1975col 的值将是第一个(如果它们存在)。
    最后,表达式ABS(col - 1975) 会将最接近1975 的值放在顶部,TOP 1 将选择它。

    【讨论】:

      【解决方案3】:

      所以,如果 a

      这里是 SQL。这使用相关子查询。我最近没有 Access 方面的经验,但一定有可能。

      create table a (
      a int not null
      )
      create table b (
      b int not null
      )
      
      insert a
      values (1975), (1632)
      
      insert b
      values (2000), (1900), (1800), (1700)
      
      select a.a
      , case
          when a.a < (select min(b) from b)
            then (select min(b) from b)
          else (select max(b.b) from b where b.b <= a.a)
        end as b
      
      from a
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多