具有多个条件的IIF语句

时间:2018-08-14 16:33:43

标签: sql ms-access

同意:

IIf([consents].[decision]=1,"grant",
    IIf([consents].[allowbreaktheglass]=0,"deny""Default"),
    IIf([consents].[AllowBreakTheGlass]=1 AND [consents].[Decision]=0,"emergency only"))

IIF语句返回错误:

  

您输入的表达式的函数包含错误数量的参数

同意的标准仅是授予,拒绝和紧急情况。

3 个答案:

答案 0 :(得分:1)

IIF语句的语法为:IIf ( expr , truepart , falsepart ) 您在以下2中缺少falsepart

尝试更改:IIf([consents].[allowbreaktheglass]=0,"deny""Default")

收件人:IIf([consents].[allowbreaktheglass]=0,"deny","Default")

和:IIf([consents].[AllowBreakTheGlass]=1 AND [consents].[Decision]=0,"emergency only")

收件人:IIf([consents].[AllowBreakTheGlass]=1 AND [consents].[Decision]=0,"emergency only","")

有关更多信息,请访问:https://support.office.com/en-us/article/iif-function-32436ecf-c629-48a3-9900-647539c764e3

答案 1 :(得分:1)

尚不能100%清楚地尝试使用Nested IIF statement完成什么,但是您只是缺少一个失败参数,可能就是您想要的:

添加了“错误?”最后一个失败参数,并将“默认”移到第一个子句的失败中。

Consent: 
    IIF([consents].[decision] = 1, 'grant',
        IIF([consents].[allowbreaktheglass] = 0, 'deny',
            IIF([consents].[AllowBreakTheGlass] = 1 AND [consents].[Decision] = 0,
                'emergency only', 'Error?')) 'Default')

答案 2 :(得分:1)

看看您是否发现Switch比嵌套的IIf语句容易。

在Access查询设计器中打开一个新查询,切换到SQL View,然后粘贴此语句...

SELECT
    Switch(
            c.[decision]=1, 'grant',
            c.[allowbreaktheglass]=0, 'deny',
            c.[AllowBreakTheGlass]=1 AND c.[Decision]=0, 'emergency only',
            True, 'Default'
          ) AS Consent
FROM consents AS c;

Switch对表达式/值对进行操作。它从表达式计算为True的第一对返回值,并忽略其余对,无论它们是否为True。

不确定我了解您想要的逻辑,但是如果'grant',那么第一对将返回[decision]=1。如果没有,它将检查下一对。等等。最后一对具有True作为表达式,因此当前三对都不匹配时,该函数将返回'Default'