14

CASE WHENMS Access 的ODBC 支持子句吗?是否有其他不支持该CASE WHEN子句的数据库?我在使用 ODBC 连接到 MS Access 时尝试了以下查询,但出现异常。

SELECT (CASE WHEN (AGE > 10) THEN 1 ELSE 0 END) FROM demo

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression '(CASE WHEN (AGE > 10) THEN 1 ELSE 0 END)'

我试图找到一种通用方法,该方法适用于大多数数据库,在与 ODBC 连接时使用比较表达式生成(计算)新的“布尔列”。实际上,MS Access 支持在 SELECT 子句中进行比较,但对于其他一些数据库,则需要 CASE 子句。对于 MS Access,SQL 可以是

SELECT AGE > 10 FROM demo

但在其他情况下,它必须是

SELECT (CASE WHEN (AGE > 10) THEN 1 ELSE 0 END) FROM demo

4

3 回答 3

28

由于您使用 Access 来编写查询,因此您必须坚持使用 Access 的 SQL 版本。

要在几个不同的返回值之间进行选择,请使用 switch() 函数。因此,要稍微翻译和扩展您的示例:

select switch(
  age > 40, 4,
  age > 25, 3,
  age > 20, 2,
  age > 10, 1,
  true, 0
) from demo

“真”情况是默认情况。如果您没有它并且其他情况都不匹配,则该函数将返回 null。

Office 网站有这方面的文档,但它们的示例语法是 VBA,它也是错误的。我已就此向他们提供反馈,但您应该按照上面的示例进行操作。

于 2013-02-17T16:52:31.953 回答
15

您可以使用IIF下一个示例中的语句:

SELECT
   IIF(test_expression, value_if_true, value_if_false) AS FIELD_NAME
FROM
   TABLE_NAME
于 2013-05-22T12:26:11.850 回答
1

我不得不使用多个 IIF 语句在 ACCESS SQL 中创建类似的结果。

IIf([refi type] Like "FHA ST*","F",IIf([refi type]="VA IRRL","V"))

所有剩余的将保持为 Null。

于 2016-11-18T22:23:53.203 回答