SQL除以零错误-ISNULL不工作



我正在处理一个查询,它可以进行一些计算,特别是合计和百分比。由于这些数据是基于所选日期范围的可选数据,因此有时它无法运行此数学运算。

在这个例子中,我得到了一个被零除的错误。

SELECT (
SELECT COUNT(s.ScoreID) AS TotalSamples,
COUNT(CASE WHEN qd.QDResultDesc = 'Pass' THEN 1 END) AS Pass,
COUNT(CASE WHEN qd.QDResultDesc = 'Pass' THEN 1 END) * 100 / COUNT(s.ScoreID) AS Quality,
COUNT(CASE WHEN qd.QDResultDesc = 'Fail' THEN 1 END) AS Fail,
COUNT(CASE WHEN qd.QDResultDesc = 'Fail' THEN 1 END) * 100 / COUNT(s.ScoreID) AS Error
FROM SubmissionScore AS s
JOIN gSubmission AS sub
ON sub.SubmissionID = s.RecordID
JOIN gQDResult AS qd
ON s.QDResultID = qd.QDResultID
JOIN resources.emp.Employees as e
ON sub.TeammateQID = e.QID
WHERE e.CampusID = 66 -- Chennai
FOR    XML PATH ('overall'), ELEMENTS, TYPE, ROOT ('chennai')
)
FOR    XML PATH ('data'), ELEMENTS, TYPE, ROOT ('root');

我试着添加ISNULL来解释丢失的部分,但这似乎并不能解决问题。

在上面的查询中,如果没有数据,我希望输出只是0

有没有一种简单的方法可以调整这个代码来解决这个问题?

您要查找的是NULLIF(),而不是ISNULL():

COUNT(CASE WHEN qd.QDResultDesc = 'Pass' THEN 1 END) * 100 / NULLIF(COUNT(s.ScoreID), 0) AS Quality,

您可能还需要* 100.0,因为SQL Server执行整数运算。

最新更新