如何在 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
不是必需的。
我想做的是创建一个 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
不是必需的。