使用Access数据库
如何使用案例条件?
我的查询
Select
ID,
Name,
Intime,
case when Outtime=Intime then ‘000000’ else Outtime end as Out
from table
以上查询在SQL 2000中接受,但在Access数据库中不接受
我如何检查条件?
需要查询帮助。
答案 0 :(得分:4)
我相信你可以使用IIF功能。
Select ID, Name, Intime, IIF(Outtime=Intime,‘000000’,Outtime) as Out
from table
直接从文档中获取:
IIf(expr,truepart,falsepart)
IIf函数语法有这些 参数
Argument | Description
expr | Required. Expression you want to evaluate.
truepart | Required. Value or expression returned if expr is True.
falsepart | Required. Value or expression returned if expr is False.
说明
IIf总是评估truepart和 falsepart,即使它只返回 其中之一。因此,你 应该注意不良方面 效果。例如,如果评估 falsepart导致划分 零错误,即使发生错误 expr是真的。
答案 1 :(得分:1)
MS Access使用JET SQL,而不是MSSQL中的T-SQL。
答案 2 :(得分:1)
Access SQL有几个内置函数,可以提供标量值的条件评估。 IIf
(已经提到)评估单个条件并返回两个值中的一个。它可以任意嵌套。还有一个Switch
语句,它采用任意长的一系列参数。如果第一个参数为true,则返回第二个参数,如果第三个参数为true,则返回第四个参数,依此类推。
Switch(outtime=intime, '000000',
outtime='something else', 'some other value',
true, 'default value')
对于您的具体案例,IIf
这个更好的选择,但在某些情况下,Switch
可能是一个不错的选择。
答案 3 :(得分:0)
如果清理代码 - 将列相关名称重命名为'out'(这是保留字),将关键字更改为大写等,然后根据Mimer SQL-92 validator您的SQL是有效的中间SQL -92代码。因此,您应该合理地期望这个vanilla SQL代码可以在任何现代SQL实现上运行。
可悲的是,Access数据库引擎不是现代SQL实现,并且在任何级别都不符合SQL-92。
这里的问题是Access数据库引擎不支持CASE
表达式。相反,它有一个自己的IIF()
表达式。通常我可以通过添加限定符来找借口,“...因为Access数据库引擎与VBA共享表达式服务。”问题是,在这种情况下它不会:Access数据库引擎SQL中的IIF()
表达式与VBA IIF()
表达式的工作方式不同,例如。
SELECT IIF(0 = 1, 55 / 0, 99)
正常工作,返回值99。
? IIf(0 = 1, 55 / 0, 99)
因“零错误错误”而失败。
FWIW如果你确实需要VBA和SQL来工作,请考虑SWITCH
表达式
SELECT SWITCH(1 = 1, 55, TRUE, 55 / 0)
? Switch(1 = 1, 55, TRUE, 55 / 0)
两者均以'除零错误'失败。
Access数据库引擎SQL在VBA中找不到表达式(例如IS NULL
,IN()
等),为什么没有CASE
表达式?我们可能永远不会知道。 Access数据库引擎记录不完整;具体来说,从来没有太多开始,我们所拥有的是充满错误(材料和遗漏的错误),并且,由于引擎的年龄(即旧),存在的文档正逐渐从MSDN和微软的消失网站。老喷气机专家已经转移到其他项目。