Sql MS Access是否支持;“在什么情况下”;子句是否连接ODBC?
ODBC是否支持MS Access的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连接时,使用比较表
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,…)
。