【问题标题】:Access SQL IIF statement not evaluating correctly访问 SQL IIF 语句未正确评估
【发布时间】:2019-06-08 23:58:32
【问题描述】:

我的 Access SQL 查询使用了一个未正确评估的 iif 语句。我看不出iif 语句的问题。

下面的 SQL 代码产生下面的表格。

SELECT PR, 
    G21_Start AS Genesis_Date, 
    SWITCH(G21_comp IS NULL, 2.1,
               G22_comp IS NULL, 2.2,
               G31_comp IS NULL, 3.1,
               G32_comp IS NULL, 3.2,
               G33_comp IS NULL, 3.3,
               G4_comp IS NULL, 4,
               1=1, 0) AS Current_Gate, 
    DSUM ("Goal", "qry_Gate_Status", "Gate <= " & Current_Gate & " AND PR 
    = '" & PR & "'") AS Target_Days, 
   (DATE() - G21_Start) AS Elapsed, 
   IIF (Elapsed > Target_Days, "Overdue", "On Track") AS Contract_Health
FROM qry_Gate_Status_Extended;

结果:

PR     Genesis_Date  Current_Gate  Target_Days  Elapsed  Contract_Health
AA         3/8/2019           2.1  45                90  Overdue
AB         1/1/2019           3.1  73               156  On Track
BB         5/1/2019           2.2  59                36  On Track
BC        9/19/2018           2.1  45               260  On Track

Elapsed 大于Target_Days 时,Contract_Health 应为"Overdue",否则应为"On Track"

如您所见,结果并不一致。我注意到的一件事是Target_DaysDSUM 的结果)像文本字段一样左对齐,而不是数字右对齐。我一定是忽略了什么。

感谢您的帮助。

【问题讨论】:

  • 良好并仔细观察????因此,您应该在比较之前将文本值转换为数字。否则按字母比较(字母对字母)顺序 4 1、5 > 3,依此类推。
  • 我仍然想知道为什么 DSUM 没有返回数字?我想我假设“SUM”是一个数值而不是一个字母字符。

标签: sql ms-access


【解决方案1】:

我使用 VAL() 函数将我认为是数字的数字转换为实际数字,并且它起作用了。

VAL(DSUM ("Goal", "qry_Gate_Status", "Gate <= " & Current_Gate & " AND PR 
= '" & PR & "'")) AS Target_Days

感谢您的提示!!!你们摇滚!!!

【讨论】:

  • 尽早转换值的好风格(来自源)。
【解决方案2】:

在比较之前尝试使用此表达式将文本(此处:字段 Target_Days 的值)转换为数字:

IIF ( Elapsed > VAL(Target_Days), "Overdue", "On Track")

VAL功能详见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多