【问题标题】:How to concatenate IIFs in SQL Access如何在 SQL Access 中连接 IIF
【发布时间】:2017-02-12 13:13:53
【问题描述】:

我要做的是创建一个表,其中有两列,第二列是变量 1 的聚类,以根据其值对其进行分类;如果

SELECT Variable2_name,
       IIF(Variable1_name< 0.1,
           "0 - 10",
           IIF(Variable1_name >= 0.1 AND Variable1_name < 0.2,
               "11 - 20",
               "21 - 100")
       ) AS Bucket
FROM Table
GROUP BY Variable2_name,
         IIF(Variable1_name < 0.1,
             "0 - 10",
             IIF(Variable1_name < 0.1,
                 "0 - 10",
                 IIF(Variable1_name >= 0.1 AND Variable1_name < 0.2,
                     "11 - 20",
                     "21 - 100")
             ),
ORDER BY Variable2_name

问题必须在 IIF 子句中,因为当我有一个简单的 IIF 子句时,它可以正常工作。语法有什么问题?在另一个 IIF 子句中连接一个 IIF 子句的方法是什么,以及如何将它包含在 GROUP BY 子句中?

非常感谢!

非常感谢

【问题讨论】:

  • 看一看您的格式化查询并告诉我们问题所在。你在SELECT 中调用的IIF() 看起来是合法的,但是GROUP BY 是一团糟,其中嵌套了IIF,这似乎只是一个错字。

标签: sql ms-access iif-function


【解决方案1】:

代码中有明显的语法错误(select 中有两个 iif()s,group by 中有三个)。一般来说,switch 比嵌套的iif()s 更容易使用。它的工作原理很像其他数据库中的case

SELECT Variable2_name,
       SWITCH(Variable1_name < 0.1, "0 - 10",
              Variable1_name < 0.2, "11 - 20",
              "21 - 100"
             ) AS Bucket
FROM Table
GROUP BY Variable2_name,
         SWITCH(Variable1_name < 0.1, "0 - 10",
                Variable1_name < 0.2, "11 - 20",
                "21 - 100"
               )
ORDER BY Variable2_name;

注意:因为它通过SWITCH() 迭代的逻辑,第二个条件不需要两个部分。这也减少了出错的机会。

其次,您没有使用任何GROUP BY 函数,因此您可以进一步简单地使用SELECT DISTINCT

SELECT DISTINCT Variable2_name,
       SWITCH(Variable1_name < 0.1, "0 - 10",
              Variable1_name < 0.2, "11 - 20",
              "21 - 100"
             ) AS Bucket
FROM Table
ORDER BY Variable2_name;

而且,如果您知道这些值已经不同,则不需要 DISTINCT

【讨论】:

    【解决方案2】:

    除了你的畸形剪切和粘贴,你可以稍微减少它:

    SELECT Variable2_name,
           IIF(Variable1_name < 0.1,
               "0 - 10",
               IIF(Variable1_name < 0.2,
                   "11 - 20",
                   "21 - 100")
           ) AS Bucket
    FROM Table
    GROUP BY Variable2_name,
           IIF(Variable1_name < 0.1,
               "0 - 10",
               IIF(Variable1_name < 0.2,
                   "11 - 20",
                   "21 - 100")
           )
    ORDER BY Variable2_name
    

    【讨论】:

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