我开发了一个 SQL 查询,但出现错误“遇到除以零错误”

问题描述

SELECT 
    TheDate,00 AS ReportID,(SELECT SiteID FROM LocalVariables) AS SiteID,(SELECT COUNT(COALESCE([ReviewID],0)) AS Expr1 
     FROM [RAAudits]  
     WHERE (CAST([DateCompleted] AS date) = DateExtended.TheDate) 
    AND pass = 1) * 100 /
          (SELECT COUNT(COALESCE([ReviewID],0)) AS Expr2 
           FROM [RAAudits]  
           WHERE (CAST([DateCompleted] AS date) = DateExtended.TheDate)) AS DataValue
FROM   
    DateExtended  
WHERE  
    TheDate BETWEEN (SELECT ServiceStartDate FROM LocalVariables) 
                AND GETDATE() -1

解决方法

我建议改用 avg()。假设 pass 仅采用值 01

SELECT TheDate,00 As ReportID,(SELECT SiteID from LocalVariables) as SiteID,(SELECT AVG(pass * 100.0)
        FROM [RAAudits]  
        WHERE cast([DateCompleted] as date) = DateExtended.theDate
       )
FROM DateExtended  
WHERE TheDate BETWEEN (SELECT ServiceStartDate from LocalVariables) AND GETDATE() -1;

注意:使用子查询代替 JOIN 似乎很奇怪,但它们不应该影响性能。但是,如果 LocalVariables 有多于一行,查询将中断。