如果连接ODBC,MS Access是否支持"CASE WHEN"子句?

Aar*_*ron 13 sql database ms-access odbc

ODBC支持CASE WHENMS Access的子句吗?是否有其他数据库不支持该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

Yaw*_*war 28

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

要在几个不同的返回值之间进行选择,请使用switch()函数.所以要翻译和扩展你的例子:

select switch(
  age > 40, 4,
  age > 25, 3,
  age > 20, 2,
  age > 10, 1,
  true, 0
) from demo
Run Code Online (Sandbox Code Playgroud)

"真实"案例是默认案例.如果您没有它并且没有其他情况匹配,则该函数将返回null.

办公室网站对本文档,但他们的榜样语法是VBA和它也是错误的.我已经给了他们这方面的反馈,但是按照上面的例子你应该没问题.


小智 13

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

SELECT
   IIF(test_expression, value_if_true, value_if_false) AS FIELD_NAME
FROM
   TABLE_NAME
Run Code Online (Sandbox Code Playgroud)