Access中的案例表达式

36 sql ms-access

你能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会评估所有表达式,即使它只返回其中一个表达式.因此,您应该注意不良副作用.例如,如果任何表达式的求值导致除以零错误,则会发生错误.

  • "dbo_tbl_property.LASTSERVICEDATE> Contour_dates.[最后CP12日期]"是你的真/假 (3认同)

juc*_*bee 9

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.

  • 如果要评估更多的多个条件,`switch`函数是一个更好的函数.与使用嵌套的`IIF`函数相比,它更容易阅读/理解/维护.另外,实现默认值而不是创建基本上评估为"所有先前表达式都为假"的逻辑表达式的另一种方法是使用"true"作为要评估的最终表达式.例如`switch(dbo_tbl_property.LASTSERVICEDATE> Contour_dates.[Last CP12 Date],dbo_tbl_property.LASTSERVICEDATE,true,Contour_dates.[Last CP12 Date])` (4认同)