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

Is there an easier way than nested iifs to count mismatched conditions in SQL server

下图显示了 table 个帐户和我要计算的结果。即每次帐号为 106844 且结果为 "MESSAGE" 或 "ESCALATION EMAIL" 时应计为 1,而任何其他结果均计为 0。我通常会做的是一团乱七八糟的 iif,例如

   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]

等等,但伙计,我觉得必须有一种更简单的方法,或者一种更不容易在第 7 个嵌套 iif 中犯随机错误并把整个事情搞砸的方法。有什么想法吗?

不要使用 iif()。它是 SQL 服务器中的一项功能,用于向后兼容 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

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

是啊...有
最后一个参数是当条件为假时,其他所有东西都会落在那里。

SUM( IIF([ACCOUNT] = '106719' AND [OUTCOME] IN ('MESSAGE','ESCALATION_EMAIL'),1,0))

为什么不使用具有帐户和结果的查找 table 并使用它?然后,随着需求的变化,您可以更新查找 table 而不必担心您的代码。