【问题标题】:I have developed a SQL query, and I got an error "Divide by zero error encountered."我开发了一个 SQL 查询,但出现错误“遇到除以零错误”。
【发布时间】:2021-07-29 11:16:33
【问题描述】:
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

【问题讨论】:

  • 在#TEMP 表中显示您的示例数据,我们可以帮助查询
  • 这里隐含的信息太多了。例如,我推断localVariables 只有一行,而[DateCompleted] 来自DateExtended 表,但在这两种情况下我都无法确定。您应该提供足够的示例数据,以便我们可以复制您想要做的事情,这一切都在这里解释:stackoverflow.com/help/minimal-reproducible-example

标签: sql null divide-by-zero


【解决方案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;

注意:使用子查询而不是JOINs 似乎很奇怪,但它们应该不会影响性能。但是,如果LocalVariables 包含多于一行,则查询将中断。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多