有没有比嵌套的iif更简单的方法来计算SQL服务器中不匹配的条件

tom*_*ine 0 sql sql-server iif

下图显示了一个帐户表和我想要计算的结果.即每次帐号为106844,结果为"MESSAGE"或"ESCALATION EMAIL",应该算作1,其他任何结果都算为0.我通常做的是像Iifs这样可怕的混乱

   sum( iif([account] = '106719' and [Outcome] in ('MESSAGE','ESCALATION_EMAIL'),1,iif([account] = '310827' and [outcome] <> 'ABORT' and 'CALL_OUTCOME_LB' in ("Call patched to Customer Care","Message Taken"),1,iif( ... , 0) as [Total Outcomes]
Run Code Online (Sandbox Code Playgroud)

等等,但男人觉得必须有一个更简单的方法,或者更不容易在第7个嵌套的iif中犯一个随机的错误并弄乱整个事情.有任何想法吗?

输入

Gor*_*off 5

不要用iif().它是SQL Server的一个函数,用于与MS ACCESS的后向兼容性.为什么你想要向后兼容这样的东西?

使用ANSI标准CASE表达式:

  sum(case when account = '106719' and Outcome in ('MESSAGE', 'ESCALATION_EMAIL')
           then 1
           when account = '310827' and outcome <> 'ABORT' and
                'CALL_OUTCOME_LB' in ("Call patched to Customer Care", "Message Taken")
           then 1
           . . .
           else 0
       end) as Total_Outcomes
Run Code Online (Sandbox Code Playgroud)

我还建议你为列命名,这样它们就不需要被转义(为什么"Total Outcomes"变成了"Total_Outcomes").这简化了代码.