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

Tsql 当某些除数为空时,处理除数0错误,tsql,Tsql,我得到了被0除的错误。我注意到有时候我除以的字段是空的 (SUM(RentMonths * SQFT) / SUM(SQFT)) 当SQFT有时可以为空时,处理这种情况的正确方法是什么?我知道这可能是糟糕的数据,但这不是重点;我现在无法解决这个问题。除以NULL完全有效-结果就是NULL。问题是(如错误消息所述)当您尝试除以零时 您可以使用来解决此问题: (SUM(RentMonths * SQFT) / NULLIF(SUM(SQFT), 0)) 如果除数为0或任一操作数为NULL,则结果

我得到了被0除的错误。我注意到有时候我除以的字段是空的

(SUM(RentMonths * SQFT) / SUM(SQFT))

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

除以
NULL
完全有效-结果就是
NULL
。问题是(如错误消息所述)当您尝试除以零时

您可以使用来解决此问题:

(SUM(RentMonths * SQFT) / NULLIF(SUM(SQFT), 0))
如果除数为
0
或任一操作数为
NULL
,则结果将为
NULL


正如评论中指出的,还可以使用
案例
陈述:

CASE WHEN SUM(SQFT) <> 0 THEN (SUM(RentMonths * SQFT) / SUM(SQFT)) END
当总和(平方英尺)为0时,则(总和(租金月*平方英尺)/总和(平方英尺))结束

优点是,这几乎适用于任何数据库,但缺点是它重复表达式以计算除数。

除以
NULL
完全有效-结果就是
NULL
。问题是(如错误消息所述)当您尝试除以零时

您可以使用来解决此问题:

(SUM(RentMonths * SQFT) / NULLIF(SUM(SQFT), 0))
如果除数为
0
或任一操作数为
NULL
,则结果将为
NULL


正如评论中指出的,还可以使用
案例
陈述:

CASE WHEN SUM(SQFT) <> 0 THEN (SUM(RentMonths * SQFT) / SUM(SQFT)) END
当总和(平方英尺)为0时,则(总和(租金月*平方英尺)/总和(平方英尺))结束

优点是,这几乎适用于任何数据库,但缺点是它重复表达式以计算除数。

IF语句在这里似乎非常合适,不是吗

不知道这是否是正确的TSQL语法,但:

IF @SQFT IS NOT NULL (SUM(RentMonths * SQFT) / SUM(SQFT))

一个IF语句在这里似乎很合适,不是吗

不知道这是否是正确的TSQL语法,但:

IF @SQFT IS NOT NULL (SUM(RentMonths * SQFT) / SUM(SQFT))

谢谢,是的,这个案例和可读代码一样非常草率。我将尝试使用NULLIF。谢谢。是的,这个案例和可读代码一样非常草率。我要试试这个。