在 CASE WHEN 中何处使用 NULLIF?

Posted

技术标签:

【中文标题】在 CASE WHEN 中何处使用 NULLIF?【英文标题】:Where to use NULLIF inside of a CASE WHEN? 【发布时间】:2020-05-03 17:30:01 【问题描述】:

执行以下代码时出现除以零错误。我在ELSE 之后尝试了NULLIF,但我遇到了同样的错误消息:

SELECT 
    country_IBS
    , Sku
    , LTM_Sales_USD
    , PTM_Sales_USD
    , LTM_Cost_USD
    , (CASE WHEN -([LTM_Sales_USD]-[PTM_Sales_USD])/([LTM_Sales_USD]+[PTM_Sales_USD]) IS NULL
    THEN 0
    ELSE -([LTM_Sales_USD]-[PTM_Sales_USD])/([LTM_Sales_USD]+[PTM_Sales_USD])  END  +1)/2 AS "Sales Growth % (scaled)"  
FROM #tempSalesChange

【问题讨论】:

以下答案之一是否回答了您的问题?如果是,请接受其中之一。 【参考方案1】:

将分隔符包裹在NULLIF

Expression 1 / NULLIF(Expression 2,0)

这意味着如果除法器为0,则返回NULL,避免除以零错误。

在你的情况下,那是([LTM_Sales_USD]+[PTM_Sales_USD])

【讨论】:

【参考方案2】:

如果怀疑你想要:

(1 - ([LTM_Sales_USD] - [PTM_Sales_USD]) / NULLIF([LTM_Sales_USD] + [PTM_Sales_USD], 0) 
) / 2 AS [Sales Growth % (scaled)]

即:除数应包含在NULLIF(..., 0) 中。这避免了除以零错误 - 在这种情况下,整个计算返回 NULL

【讨论】:

以上是关于在 CASE WHEN 中何处使用 NULLIF?的主要内容,如果未能解决你的问题,请参考以下文章

case when用法sql

SQL语句中case,when,then的用法

在 SQL Server 中结合 dbplyr 和 case_when

Sql文的where中使用case when

C语言中case和when的用法

ORACLE:使用 CASE-WHEN-STATE 的结果