2011-08-04 46 views
4
SELECT ((CASE WHEN (qid2.AgeBelow_16 - qid1.AgeBelow_16)= 0 THEN 1 ELSE (qid2.AgeBelow_16- qid1.AgeBelow_16) END)/ (CASE WHEN [qid1].AgeBelow_16= 0 THEN 1 ELSE [qid1].AgeBelow_16 END))*100 AS AgeBelow_16_Percent, 
    -- otherfields 

    FROM 
    -- whole query 

我正在使用上面的查詢來計算與舊值和新值的差異百分比。主要問題是有如果任何字段值爲0,則拋出「被零分隔錯誤遇到錯誤」,所以我使用的情況下,然後結束。以上的實施是好的或可以寫得更好,那麼請建議我,因爲當字段像10以上那樣巨大時,它更加混亂。句柄「除以零錯誤遇到錯誤」

回答

4

也許這樣的事情?

declare @X int = 0 
select 10/isnull(nullif(@X, 0), 1) 
+0

很好,但是在性能方面比它更好呢? –

+1

@Govind KamalaPrakash Malviya:不一定,如果沒有,我希望這種差異是無關緊要的。但是你應該自己對它進行基準測試。或者,您可以使用COALESCE而不是ISNULL,並查看它是否對您更好(更快)。 –

+0

@Govind - 在真正慢的筆記本電腦上對100000行進行了快速測試,Andriy是正確的。耗時2.7秒,時間差約爲50毫秒。 –