我创建了一个MS Access数据库,用于跟踪工作中的某些项目。用户输入数据,然后在查询中聚合(使用计数或求和)来计算每个区域的实际值,使用UNION连接,然后与该区域的目标进行比较。我试图输入一个IIF声明来有条件地计算[Act] / [Goal]的百分比,如果[Act]为空,则为零;如果[Act]大于[Goal],则为1,因此没有超过100%。问题是它大部分时间都有效,但其他时间失败,没有明显的逻辑错误或者为什么我能弄清楚的原因。
有时它无法告诉[法案]> [目标]即使看着它,也很明显。数字都是整数,没有什么疯狂或格式化差异。 [Met]中的公式是我希望实现的。我添加了[TEST]字段以追溯它可能无法正常工作的位置,这表明Access并不总是向[Act]>返回正确的答案。 [目标]。
我的查询:
什么出来(只是破碎的部分):
正如您所看到的,它适用于大多数行,但后来认为149小于52,而128小于3.因此,它会生成超过100%的[Met]值。
有没有人在此之前发生这种情况或有任何建议?我尝试过使用刷新,点击单元格进入输入,我能想到的一切。
答案 0 :(得分:1)
我认为虽然你的列是Ints,但它们被转换为变量(或至少一个变量)Goal和Met的字符串。
如果您查看数据,您会看到如果您比较它们,则测试结果对于字符串比较是正确的。
E.g。 “3”> “128”(因为第一个字符的char值较高)。
在您的查询中,尝试在比较时使用Val()包围变量,如下所示:
IIf(IsNull([Act]),0,IIf(Val([Act])>Val([Goal]),1,Round([Act]/[Goal],2)))