你能case在Access中使用表达式吗?我正在尝试确定2列的最大日期,但在以下代码中不断收到语法错误:
CASE
WHEN dbo_tbl_property.LASTSERVICEDATE > Contour_dates.[Last CP12 Date]
THEN dbo_tbl_property.LASTSERVICEDATE
ELSE Contour_dates.[Last CP12 Date]
END AS MaxDate
Run Code Online (Sandbox Code Playgroud)
Mit*_*eat 54
您可以改用该IIF()功能.
IIF(condition, valueiftrue, valueiffalse)
Run Code Online (Sandbox Code Playgroud)
condition 是您要测试的值.
valueiftrue 是条件计算结果为TRUE时返回的值.
valueiffalse 是条件计算结果为FALSE时返回的值.
Switch当您有多个测试条件时,还有一个更容易使用和理解的功能:
Switch( expr-1, value-1 [, expr-2, value-2 ] … [, expr-n, value-n ] )
Run Code Online (Sandbox Code Playgroud)
Switch函数参数列表由表达式和值对组成.表达式从左到右进行计算,并返回与要评估为True的第一个表达式关联的值.如果部件配对不正确,则会发生运行时错误.例如,如果expr-1为True,则Switch返回值-1.如果expr-1为False,但expr-2为True,则Switch返回值-2,依此类推.
如果出现以下情况,Switch返回Null值:
没有一个表达式是真的.
第一个True表达式具有Null的对应值.
注意:Switch会评估所有表达式,即使它只返回其中一个表达式.因此,您应该注意不良副作用.例如,如果任何表达式的求值导致除以零错误,则会发生错误.
Access中没有case语句.相反,您可以使用switch语句.它看起来像下面的那个:
switch(dbo_tbl_property.LASTSERVICEDATE > Contour_dates.[Last CP12 Date],dbo_tbl_property.LASTSERVICEDATE,dbo_tbl_property.LASTSERVICEDATE <= Contour_dates.[Last CP12 Date],Contour_dates.[Last CP12 Date])
如需进一步阅读,请访问:http: //www.techonthenet.com/access/functions/advanced/switch.php
或者对于VBA中的案例函数实现示例:
http://ewbi.blogs.com/develops/2006/02/adding_case_to_.html
问候,J.