使用NULLIF除以零

时间:2018-11-23 09:16:08

标签: sql sql-server tsql

这是我在下面收到的错误:

Divide by zero error encountered.
Warning: Null value is eliminated by an aggregate or other SET operation.

环顾四周的解决方案似乎需要使用NULLIF或ISNULL,我不确定如何将其包含在下面的行中。

select  
min(round(OnCallTime*100/TotalTime,1)) as total

我正在使用SQL Management Studio 2012

4 个答案:

答案 0 :(得分:4)

在分母中使用NULLIF,如下所示:

select  
min(round((OnCallTime*100/NULLIF(TotalTime,0)),1)) as total

因此,每当TotalTime为零时,它将被NULL取代,并且不会出现Division by Zero的错误。

答案 1 :(得分:0)

使用coalesce()函数

select  
min(round(OnCallTime*100/coalesce(TotalTime,1),1)) as total

答案 2 :(得分:0)

使用coalesce()返回第一个非空值

select min(round((OnCallTime)*100/coalesce(TotalTime,1),1)) as total

答案 3 :(得分:0)

因此,如果TotalTime = 0,您要显示什么?我建议使用NULL,因为未定义除以零?

您可以按以下方式编写查询

select  
       min(round( 
                  (OnCallTime*100)
                  / (case when TotalTime =0 then null else TotalTime end)
                ,1
                )
            ) as total