簡體   English   中英

如何克服SQL Server錯誤MSG 8134遇到零錯誤除以查詢錯誤?

[英]How do I get over a SQL Server error MSG 8134 Divide by zero error encountered Error in my query?

我試圖計算2列之間的百分比變化,並得到除以零的錯誤,遇到錯誤。 我想將所有Null顯示為0,但是如果使用ISNULL,則會出現此錯誤。 我該如何克服?

SELECT
   Table2014.OrderDate AS [December2014OrderDate],
   ISNULL(Table2014.Total, 0) AS [December2014DailySales],
   ISNULL(Table2013.Total, 0) AS [December2013DailySales],
   ISNULL(Table2014.Total, 0) - ISNULL(Table2013.Total, 0) AS [DailySalesDifference],
   100.0 * (ISNULL(Table2014.Total, 0) - ISNULL(Table2013.Total, 0)) / ISNULL(Table2013.Total, 0) AS [SalesDifferencePercentage],
   ISNULL(Table2013.OrderCount, 0) AS [December2013DailyOrderCount],
   ISNULL(Table2014.OrderCount, 0) AS [December2014DailyOrderCount],  
   ISNULL(Table2014.OrderCount, 0) - ISNULL(Table2013.OrderCount, 0) AS [DailyOrderCountDifference]
FROM 
   (SELECT
       SUM(order_header_total.oht_net) AS Total,
       DATEADD(DAY, 0, DATEDIFF(D, 0, order_header.oh_datetime)) AS OrderDate,
       COUNT(order_header.oh_id) AS OrderCount
    FROM 
       dbo.order_header_total
    INNER JOIN 
       dbo.order_header ON order_header_total.oht_oh_id = order_header.oh_id
    WHERE 
       order_header.oh_datetime BETWEEN '12/01/2014 00:00:00' AND '12/31/2014 23:59:59'
       AND order_header.oh_os_id IN (1, 6, 4)
       AND order_header.oh_cd_id = 76
    GROUP BY 
       DATEADD(DAY, 0, DATEDIFF(D, 0, order_header.oh_datetime))) Table2014
LEFT OUTER JOIN 
   (SELECT
        SUM(order_header_total.oht_net) AS Total,
        DATEADD(YEAR, 1, DATEADD(DAY, 0, DATEDIFF(D, 0, order_header.oh_datetime))) AS OrderDate,
        COUNT(order_header.oh_id) AS OrderCount
     FROM 
        dbo.order_header_total
     INNER JOIN 
        dbo.order_header ON order_header_total.oht_oh_id = order_header.oh_id
     WHERE 
        order_header.oh_datetime BETWEEN '12/01/2013 00:00:00' AND '12/31/2013 23:59:59'
        AND order_header.oh_os_id IN (1, 6, 4)
        AND order_header.oh_cd_id = 76
     GROUP BY 
        DATEADD(YEAR, 1, DATEADD(DAY, 0, DATEDIFF(D, 0, order_header.oh_datetime)))) Table2013 ON Table2013.OrderDate = Table2014.OrderDate
ORDER BY 
   Table2014.OrderD

而不是DenominatorIsnull ,請使用NULLIF處理除零錯誤。

select ...
100.0*Isnull((ISNULL(Table2014.Total,0) - ISNULL(Table2013.Total, 0)) / 
                  NULLIF(Table2013.Total, 0) AS [SalesDifferencePercentage],0),
 .....

NullIF有助於將denominator中的Null替換為0 ,這將避免上述錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM