【问题标题】:Access Calculation not calculating consistently or correctly: "greater than" in IIF statement访问计算的计算不一致或不正确:IIF 语句中的“大于”
【发布时间】:2017-12-16 00:14:29
【问题描述】:

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

有时即使看着它,它也无法分辨出 [Act] > [Goal],这很明显。这些数字都是整数,没有任何疯狂或格式差异。 [Met] 中的公式是我希望实现的。我添加了 [TEST] 字段以追溯它可能无法正常工作的地方,这表明 Access 并不总是向 [Act] > [Goal] 返回正确答案。

我的查询:

结果是什么(只是损坏的部分):

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

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

【问题讨论】:

  • 它不允许我编辑(它包含的照片没有足够的点数?) [Met] 的完整公式是:Met: IIf(IsNull([Act]),0,IIf( [Act]>[Goal],1,Round([Act]/[Goal],2))) [TEST] 的完整公式为: TEST: IIf([Act]>[Goal], "greater", “小于”)
  • 查询结果窗口中有一个很好的线索:文本值左对齐,而数值右对齐。

标签: ms-access ms-access-2013 calculated-field


【解决方案1】:

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

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

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

在您的查询中,在比较变量时尝试用 Val() 将变量括起来,如下所示:

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

【讨论】:

  • 谢谢!我想知道这是否是基于某人在不同程序中遇到的问题,但不确定如何测试。这解决了所有问题:) 清楚地解释它的奖励积分,但仍然很友善。
  • 很高兴为您提供帮助:)
  • 问题的根源是,联合查询通常返回数字字符串。您没有透露您的查询,但请阅读here。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 2023-01-02
  • 2020-10-26
  • 1970-01-01
相关资源
最近更新 更多