如何在 SQL Access 中串联 IIF

How to concatenate IIFs in SQL Access

我想做的是创建一个 table,其中我有两列,第二列是 Variable1 的聚类,根据其值对其进行分类;如果 < 0.1,那么我想显示“0-10”,如果值在 0.1 和 0.2 之间,则显示“11 - 20”,如果其他,则显示“21 - 100”。当我 运行 下面的代码时, "Missing syntax operator error" 出现。

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 子句中?

非常感谢!

非常感谢

除了你的畸形cut-and-paste,你可以稍微减少它:

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

代码中存在明显的语法错误(select 中有两个 iif()group by 中有三个。一般来说,switch 比嵌套的 iif() 更容易使用。它的工作原理很像其他数据库中的 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 不是必需的。