访问计算计算不一致或不正确:IIF 语句中的 "greater than"

Access Calculation not calculating consistently or correctly: "greater than" in IIF statement

我创建了一个 MS Access 数据库来跟踪工作中的一些项目。用户输入数据,然后在查询中聚合(使用计数或求和)以计算每个区域的实际值,使用 UNION 连接,然后与该区域的目标进行比较。我试图输入一个 IIF 语句来有条件地计算 [Act]/[Goal] 的百分比,如果 [Act] 为空则将其保留为零,如果 [Act] 大于 [Goal] 则将其保留为 1,因此没有超过 100%。问题是它大部分时间都有效,但其他时候失败,没有明显的逻辑错误或我能弄清楚的原因。

有时看不出[Act] > [Goal],虽然很明显。这些数字都是整数,没有什么奇怪的或格式上的差异。 [Met]中的公式是我希望达到的。我添加了 [TEST] 字段以追溯它可能不起作用的地方,这表明 Access 并不总是向 [Act] > [Goal] 返回正确答案。

我的查询:

出来的东西(只是坏掉的部分):

如您所见,它对大多数行都能正常工作,但随后认为 149 小于 52,而 128 小于 3。因此,它生成的 [Met] 值超过 100%。

有没有人以前遇到过这种情况或有什么建议?我试过使用刷新,点击单元格按回车键,我能想到的一切。

我认为虽然您的列是 Ints,但它们在变量(或至少一个变量)Goal 和 Met 中被转换为字符串。

如果您查看数据,您会发现如果比较它们,测试结果对于字符串比较是正确的。

例如"3" > "128"(因为第一个字符的字符值更高)。

在您的查询中,尝试在比较变量时用 Val() 包围它们,如下所示:

IIf(IsNull([Act]),0,IIf(Val([Act])>Val([Goal]),1,Round([Act]/[Goal],2)‌​))