我正在分析一个旧的访问查询,其中我在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
条件。
答案 0 :(得分:2)
IIf函数是if / else where:
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。
从根本上说这只是一团糟。