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.
是否有一种简单的方法来调整此代码来解释这个问题?
你在寻找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执行整数运算.
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |