使用OR访问查询SQL IIf语句

时间:2016-07-26 19:13:35

标签: sql ms-access ms-access-2010

我有以下SQL语句:

SELECT * FROM BOM INNER JOIN Parts ON BOM.PartID = Parts.PartID
WHERE (((BOM.PUMP_CODE) Like (IIf([Forms]![frmSelector]![tbMotor]>0 And
     [Forms]![frmSelector]![tbShaft]>0,"MOTOR" Or "SHAFT",IIf([Forms]![frmSelector]![tbMotor]>0,"MOTOR","SHAFT")))))
ORDER BY BOM.BOM_INDEX;

在第一个IIF语句中,我无法获取查询以返回任何记录。当两个引用的对象都是>时,我希望它返回PUMP_CODE字段中带有“MOTOR”或“SHAFT”的所有记录。 0.即使两个对象都大于0,它仍然不会返回任何记录。然而,后一个IIF声明工作正常。这个查询有问题吗?

2 个答案:

答案 0 :(得分:2)

您的"MOTOR" Or "SHAFT"错了。首先评估两个字符串的oror使用iif()的结果。

这意味着你有效地做了

IIF(..., true, ...)

或访问or两个字符串的任何内容。

在任何几乎任何编程语言中,你都做不到

if (x == "a" or "b")

因为它将被执行为

if (x == ("a" or "b")) -> if (x == (result))

你需要做

if (x == "a") OR (x == "b")

答案 1 :(得分:0)

如果两个设置都大于0,请尝试使用IN子句而不是LIKE并将IIF更改为两者,否则请使用您的工作条款。

我还添加了转义双引号以封闭该对,并添加到单个项目以防您使用其中包含空格的项目

SELECT * FROM BOM INNER JOIN Parts ON BOM.PartID = Parts.PartID
WHERE BOM.PUMP_CODE IN (
IIf([Forms]![frmSelector]![tbMotor]>0 And [Forms]![frmSelector]![tbShaft]>0, """MOTOR"",""SHAFT""",
     IIf([Forms]![frmSelector]![tbMotor]>0,""MOTOR"",""SHAFT"")))     
ORDER BY BOM.BOM_INDEX;