使用分组依据时遇到的除零错误

时间:2019-04-02 10:36:33

标签: sql sql-server tsql

我的查询中包含以下代码:

int.TryParse(dr[1].ToString(), out a);
a = a + 1;
txtinvoiceno.Text = a.ToString("00000");

两个字段均为DateTime数据类型。问题是,当我按上述代码包含group时,会抛出此错误:

  

除以零错误。

     

警告:通过合计或其他SET消除了空值   操作。

我在这里阅读了一些线程,并尝试使用此线程:

CAST(COUNT(C.DateChanged) * 100.0 / COUNT(A.LastPassedBackToSalesDate) AS numeric(18, 2)) AS PBTSbutActived

但是,它没有帮助,我仍然遇到和以前一样的问题。

3 个答案:

答案 0 :(得分:4)

NULLIF()COUNT()之外

CAST(COUNT(C.DateChanged) * 100.0 /
           NULLIF(COUNT(A.LastPassedBackToSalesDate), 0) AS numeric(18, 2)
    ) AS PBTSbutActived

也就是说,您需要检查COUNT()结果,而不是要计算的列。

答案 1 :(得分:0)

如果COUNT(A.LastPassedBackToSalesDate)为0,则无法避免该错误。您应该在查询中添加HAVING子句:

CAST(COUNT(C.DateChanged) * 100.0 /
       NULLIF(COUNT(A.LastPassedBackToSalesDate), 0) AS numeric(18, 2)
) AS PBTSbutActived FROM .... GROUP BY ... HAVING COUNT(A.LastPassedBackToSalesDate) <> 0

答案 2 :(得分:0)

另一个选择是使用case语句,

CASE WHEN COUNT(A.LastPassedBackToSalesDate) <>0 then 
CAST(COUNT(C.DateChanged) * 100.0 / COUNT(A.LastPassedBackToSalesDate) AS numeric(18, 2)) 
ELSE NULL END AS PBTSbutActived