Access查询中的IIf和OR

时间:2016-07-01 14:02:07

标签: sql database ms-access

我正在分析一个旧的访问查询,其中我在Having子句中有一个表达式

(((IIf([Student_id] Like 'I*','IA',IIf([Student_id] Like 'D*','IA',[Student_id]))) Like 'R*'
Or (IIf([Student_id] Like 'I*','IA',IIf([Student_id] Like 'D*','IA',[Student_id]))) Like 'N*'
Or (IIf([Student_id] Like 'I*','IA',IIf([Student_id] Like 'D*','IA',[Student_id])))=" "))

在上面的查询中,我想知道IIf([Student_id] Like 'I*','IA'的含义以及这三个(IIf([Student_id] Like 'I*','IA',IIf([Student_id] Like 'D*','IA',[Student_id]))) Like 'R*'Like 'R*做了什么。最后是OR条件。

1 个答案:

答案 0 :(得分:2)

IIf函数是if / else where:

  • 第一个参数是要评估的表达式
  • 第二个参数是表达式结果为真时返回的值
  • 第三个参数是返回的值是表达式为false的结果

IIf ( expr , truepart , falsepart )

由于truepart或falsepart也可以是一个表达式,你可以嵌套对IIf的调用,这可能很强大,但读起来很痛苦。

因此,如果我们从第一位开始并缩进以显示结构:

((( IIf([Student_id] Like 'I*', 'IA', IIf([Student_id] Like 'D*', 'IA', [Student_id]))) Like 'R*'

因此,如果Student_ids以I开头,则结果为IA,结果是评估学生ID是否以D开头,结果是IA,否则结果是学生ID。

评估表达式后,结果是否以R

开头

相同但比较以查看结果ID是否以N

开头

相同但比较查看结果ID是否为“”

所以令人讨厌的嵌套IIf调用是一个过滤器,用于排除以I或D开头的学生ID。

从根本上说这只是一团糟。