1

我要做的是创建一个表,其中有两列,第二列是变量 1 的聚类,以根据其值对其进行分类;如果 < 0.1,那么我想显示“0-10”,如果值在 0.1 和 0.2 之间,则显示“11 - 20”,如果其他,则显示“21 - 100”。当我运行下面的代码时,会出现“缺少语法运算符错误”。

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

非常感谢!

非常感谢

4

2 回答 2

2

代码中有一个明显的语法错误(两个iif()sselect和三个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如果您知道这些值已经不同,则不需要。

于 2017-02-12T13:43:53.727 回答
1

除了格式错误的剪切和粘贴之外,您还可以稍微减少它:

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
于 2017-02-12T13:32:23.033 回答