当某些除数为NULL时,处理除数0错误

Pos*_*Guy 1 t-sql

我正在除以0错误.我注意到有时我划分的字段是NULL.

(SUM(RentMonths * SQFT) / SUM(SQFT))
Run Code Online (Sandbox Code Playgroud)

当SQFT有时可以为空时,处理这种情况的正确方法是什么?我知道这可能是糟糕的数据,但除此之外; 我现在无法解决这个问题.

Mar*_*ers 5

除以NULL是完全有效的 - 结果很简单NULL.当您尝试除以零时,问题是(如错误消息所述).

您可以NULLIF用来解决这个问题:

(SUM(RentMonths * SQFT) / NULLIF(SUM(SQFT), 0))
Run Code Online (Sandbox Code Playgroud)

NULL如果除数是0或者任何一个操作数是结果,结果将是NULL.


正如评论中指出的那样,CASE也可以使用一个声明:

CASE WHEN SUM(SQFT) <> 0 THEN (SUM(RentMonths * SQFT) / SUM(SQFT)) END
Run Code Online (Sandbox Code Playgroud)

优点是这几乎可以在任何数据库中使用,但缺点是它重复表达式来计算除数.