Где использовать NULLIF в случае, когда? - PullRequest
0 голосов
/ 03 мая 2020

Я получаю ошибку деления на ноль при выполнении кода ниже. Я попытался NULLIF после инструкции ELSE, но я получаю то же сообщение об ошибке:

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

Ответы [ 2 ]

2 голосов
/ 03 мая 2020

Если вы подозреваете, что хотите:

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

То есть: делитель должен быть обернут в NULLIF(..., 0). Это позволяет избежать ошибки деления на ноль - в этом случае вместо всего вычисления возвращается NULL.

2 голосов
/ 03 мая 2020

Оберните делитель в NULLIF:

{Expression 1} / NULLIF({Expression 2},0)

Это будет означать, что если делитель равен 0, то будет возвращено NULL, и ошибка деления на ноль будет исключена.

В вашем случае это ([LTM_Sales_USD]+[PTM_Sales_USD]).

...