Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql MS Access是否支持;“在什么情况下”;子句是否连接ODBC?_Sql_Database_Ms Access_Odbc - Fatal编程技术网

Sql MS Access是否支持;“在什么情况下”;子句是否连接ODBC?

Sql MS Access是否支持;“在什么情况下”;子句是否连接ODBC?,sql,database,ms-access,odbc,Sql,Database,Ms Access,Odbc,ODBC是否支持MS Access的CASE WHEN子句?是否有其他数据库不支持WHEN子句时的情况?我在使用ODBC连接MS Access时尝试了以下查询,但出现异常 从演示中选择(年龄>10岁时的案例),然后选择1或0结束 [Microsoft][ODBC-Microsoft-Access-Driver]查询表达式中的语法错误(缺少运算符)(CASE WHEN(AGE>10)然后1 ELSE 0 END) 我试图找到一种通用的方法,该方法适用于大多数数据库,在使用ODBC连接时,使用比较表

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

从演示中选择(年龄>10岁时的案例),然后选择1或0结束

[Microsoft][ODBC-Microsoft-Access-Driver]查询表达式中的语法错误(缺少运算符)(CASE WHEN(AGE>10)然后1 ELSE 0 END)

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

从演示中选择年龄>10岁

但在其他国家,它必须是


从demo中选择(CASE WHEN(AGE>10)然后选择1,否则0结束)

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

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

select switch(
  age > 40, 4,
  age > 25, 3,
  age > 20, 2,
  age > 10, 1,
  true, 0
) from demo
“true”情况是默认情况。如果没有,并且其他情况都不匹配,则函数将返回null


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

您可以使用
IIF
语句,如下一个示例中所示:

SELECT
   IIF(test_expression, value_if_true, value_if_false) AS FIELD_NAME
FROM
   TABLE_NAME

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

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

所有剩余的将保持空。

我似乎记得您在MS Access中使用了
IIF
,而不是
CASE
(这不是ODBC特有的,只是一般的访问方式)。是的,但是
IIF
是MS Access特有的。我想确定ODBC是否支持MS Access的
CASE
。使用ODBC发送语句时,必须使用目标数据库支持的SQL。MS Access不支持CASE语句,因此到MS Access的ODBC连接也不能“支持”它们。@我怀疑OP是否会得到更好的答案。(Harriet Vane最近怎么样?@Remou我的出身很卑微,但它们都是迷人的故事:)
Switch()
返回分配给匹配的第一个条件的值。所以如果年龄是40岁,表达式将返回1。相反,按年龄递减顺序排列条件。但我们甚至不知道Aaron是否想评估不止一种情况。@HansUp-谢谢您的关注!拍拍自己的额头,是的,我们不知道他是否想要多个案例,但我只是想展示一下语法的一般形式,他可以删除他不需要的额外案例。@Yawar@HansUp谢谢大家,我正在尝试找到一种通用的方法,用于大多数数据库的生成(计算)带有比较表达式的新“布尔列”。实际上,MS-Access支持在
SELECT
子句中进行比较,但是对于其他一些数据库,需要使用
CASE
子句。在MS Access中,SQL可以是
SELECT AGE>10 FROM demo
,但在其他情况下,它必须是
SELECT(当(AGE>10)时,则为1,否则为0结束)FROM demo
@yawar+1进行切换。既然您似乎对文档进行了研究,那么您能否介绍一下switch和IIF之间的性能比较?从我遇到IIF slow…@bonCodigo的原因来看,我对性能特征了解不多,但根据我的经验,
switch()
在处理与
null
的比较时表现不佳。因此,如果您正在执行类似于
switch(某物为null,1,…)
的操作,您应该改用
iif(某物为null,1,…)