2014-10-09 30 views
0

我有以下查詢:SQL服務器(避免了空值除以)

UPDATE FinanceTable 
SET PercentageComplete = (SELECT (Sum(LabourFinance.HoursTaken/LabourFinance.Hours)/Count(LabourID)) 
          FROM LabourFinance 
          WHERE FinanceID = (SELECT TOP 1 FinanceID 
               FROM FinanceTable 
               ORDER BY changedate DESC) 
          GROUP BY FinanceID) 
WHERE FinanceID = (SELECT TOP 1 FinanceID 
        FROM FinanceTable 
        ORDER BY changedate DESC) 

什麼這個查詢的作用是選擇基於CHANGEDATE 1個特定的細胞,我使用更新的成本值在我的FinanceTable中。

這種情況導致了我的問題:

  • 我已撥出百小時插入表格後完成任務
  • HoursTaken目前0作爲計算PercntageComplete時,香港專業教育學院尚未啓動
  • ,SQL Server不會讓我這樣做(0/100),因此導致錯誤...

我該如何防止這種情況?我期望的結果將是PercentageComplete = 0%

感謝任何輸入:)下面是錯誤消息我得到運行過程中出現上述

enter image description here

+6

'0/100'應該非常好,並返回'0'。當它是除數而不是分紅時,你會遇到'0'的問題。 – 2014-10-09 13:03:27

+0

你得到的錯誤是什麼? – 2014-10-09 13:04:16

+0

那麼你在哪裏得到一個空值? – 2014-10-09 13:04:56

回答

2

查詢推薦本

How to avoid the 「divide by zero」 error in SQL?

UPDATE FinanceTable 
SET PercentageComplete = (SELECT COALESCE (Sum(COALESCE (LabourFinance.HoursTaken/NULLIF(LabourFinance.Hours, 0), 0))/NULLIF(Count(LabourID), 0), 0) 
          FROM LabourFinance 
          WHERE FinanceID = (SELECT TOP 1 FinanceID 
               FROM FinanceTable 
               ORDER BY changedate DESC) 
          GROUP BY FinanceID) 
WHERE FinanceID = (SELECT TOP 1 FinanceID 
        FROM FinanceTable 
        ORDER BY changedate DESC) 
+0

如何將此應用於我的場景但我已經看到了這一點,但未能嘗試使其工作 – Crezzer7 2014-10-09 13:12:16

+0

已更新詢問。試一試 – Recursive 2014-10-09 13:27:33

+0

我早些時候嘗試使用COALESCE,它在做什麼?並謝謝你的幫助 – Crezzer7 2014-10-09 13:28:59

相關問題