我有一個查詢正在做一些數學計算,有些時候數字可能是一個零,它的分割將導致一個錯誤。TSQL除以零誤差
我在這個網站上發現了一些關於如何解決它的問題,但現在這個數字根本不會改變。
Example Data:
los.shortTermLosses = 1
A.shortTerm = 15
Giving the equation of 1/15*12 = 0.8
COALESCE(los.shortTermLosses/NULLIF(A.shortTerm,0),0.00)* 12 AS shortTermAttrition
它必須是我做的事情,以防止除以零錯誤,但不知道如何讓它正常工作。目前的結果總是0.00
更新
對於那些誰希望看到整個查詢..
SELECT A.QID,
(SELECT TOP 1 E.[FirstName],
E.[LastName],
E.[NTID],
E.[TitleDesc],
A.[countOfDirects],
A.[longTerm],
A.[shortTerm],
COALESCE(los.totalLosses,0) totalLosses,
COALESCE(los.longTermLosses, 0) longTermLosses,
COALESCE(los.shortTermLosses,0) shortTermLosses,
COALESCE(los.shortTermLosses/NULLIF(A.shortTerm,0),0.00)* 12 AS shortTermAttrition,
COALESCE(los.longTermLosses/NULLIF(A.longTerm,0),0.00)* 12 AS longTermAttrition,
COALESCE(los.totalLosses/NULLIF(A.countOfDirects,0),0.00)* 12 AS totalAttrition
FROM employeeTable_historical AS E
OUTER APPLY (SELECT COUNT(b.leaver) as [totalLosses],
sum(case when b.term = 'LTA' then 1 else 0 end) as [longTermLosses],
sum(case when b.term = 'STA' then 1 else 0 end) as [shortTermLosses]
FROM dbo.attritionData AS B
WHERE E.QID = B.supervisor
AND MONTH(B.leaveDate) = @month
AND YEAR(B.leaveDate) = @year
GROUP BY b.supervisor
)los
WHERE E.qid = A.[QID]
AND CONVERT (DATE, dateadd(mm, (@year - 1900) * 12 + @month - 1 , @day - 1)) >= CONVERT (DATE, E.[Meta_LogDate])
ORDER BY meta_logDate DESC
FOR XML PATH (''), TYPE, ELEMENTS)
FROM (SELECT QID,
[timestamp],
[countOfDirects],
[longTerm],
[shortTerm]
FROM (SELECT QID,
[timestamp],
[countOfDirects],
[shortTerm],
[longTerm],
ROW_NUMBER() OVER (PARTITION BY QID ORDER BY [Timestamp]) AS Row
FROM [red].[dbo].[attritionCounts]
WHERE [mgrQID] = @director
AND YEAR(CAST ([timestamp] AS DATE)) = @year
AND MONTH(CAST ([timestamp] AS DATE)) = @month) AS Tmp1
WHERE Row = 1) AS A
FOR XML PATH ('DirectReport'), TYPE, ELEMENTS, ROOT ('Root');
我使用SQLServer的2008 – SBB 2014-10-18 17:25:14
無需任何編碼來鑄造結果爲錢,只是談到一個要求 - 如果shortTerm是NULL,你期望得到什麼樣的equasion結果? – TarasB 2014-10-18 17:27:17
對於任何具有零值或除零誤差的東西,我都想要'0.00'。在這種情況下,我確實有這個方程的有效數字,但它仍然顯示'0.00' – SBB 2014-10-18 17:28:15