Access查询嵌套IIf公式正确性排查及修正请求
Access查询计算字段公式修正方案
原公式存在的问题
- Access的
IIf函数参数分隔符是逗号(,),而非分号(;),原公式用分号会直接导致语法错误 - 逻辑条件优先级错误:
And优先级高于Or,原条件[Spasi]=25 And [CheckTSX]<=2,5 Or [CheckTSY]<=2,5会被错误解析为([Spasi]=25 And [CheckTSX]<=2.5) Or [CheckTSY]<=2.5,不符合「对应Spasi值下,任意一个坐标差值符合阈值即判定正确」的需求 - 小数分隔符使用逗号(,),可能因系统区域设置导致数值解析失败,建议统一用点(.)作为小数分隔符
- 多层嵌套
IIf可读性差,后续维护成本高
修正后的公式
方案1:修正嵌套IIf版本(保留原逻辑结构)
CheckTS: IIf([Spasi]=25 And ([CheckTSX]<=2.5 Or [CheckTSY]<=2.5), "Correct", IIf([Spasi]=50 And ([CheckTSX]<=5 Or [CheckTSY]<=5), "Correct", IIf([Spasi]=100 And ([CheckTSX]<=10 Or [CheckTSY]<=10), "Correct", IIf([Spasi]=200 And ([CheckTSX]<=20 Or [CheckTSY]<=20), "Correct", "Incorrect"))))
方案2:改用Switch函数(更简洁易读)
CheckTS: Switch( [Spasi]=25 And ([CheckTSX]<=2.5 Or [CheckTSY]<=2.5), "Correct", [Spasi]=50 And ([CheckTSX]<=5 Or [CheckTSY]<=5), "Correct", [Spasi]=100 And ([CheckTSX]<=10 Or [CheckTSY]<=10), "Correct", [Spasi]=200 And ([CheckTSX]<=20 Or [CheckTSY]<=20), "Correct", True, "Incorrect" )
额外说明
- 确认
CheckTSX和CheckTSY字段已正确计算(注意Y PostdrillTS字段名包含空格,需用方括号包裹,原公式已正确处理) - 若你的系统区域设置确实使用逗号作为小数分隔符,可将公式中的
.改回,,但建议统一用.避免跨环境适配问题
内容的提问来源于stack exchange,提问作者Gilang Ramadhan
相关产品推荐
相关产品推荐

