SQL除以零错误 - ISNULL不工作?

SBB*_*SBB 2 sql sql-server stored-procedures

我有一个我正在研究的查询,它会进行一些数学运算,特别是总数和百分比.由于这些数据是基于所选日期范围的可选数据,因此有时可能无法运行此数学运算.

在这种情况下,我得到零除错误.

    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');
Run Code Online (Sandbox Code Playgroud)

我已经尝试添加ISNULL帐户缺少的部分,但似乎并没有解决它.

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

是否有一种简单的方法来调整此代码来解释这个问题?

Gor*_*off 8

你在寻找NULLIF(),而不是ISNULL():

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

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