2012-07-06 33 views
0

我正在使用此查詢來計算從當前學期到最後一個記錄總計的百分比變化。我需要對此查詢進行哪些更改以避免空值? 我已經嘗試使用一個子查詢,這是痛苦地緩慢。使用SQL查詢計算從一個記錄到下一個記錄的百分比變化

SELECT E2.Term AS Prev_Term, 
     E2.[Enrollment Total] AS Prev_Enrl_Tot, 
     E1.Term, 
     E1.Location, 
     E1.milestone_description, 
     E1.polling_date, 
     Round(((E1.[Enrollment Total] - [Prev_Enrl_Tot]) 
           /[Prev_Enrl_Tot]) * 100,2) AS Percent_Change 
FROM EnrollmentsByLocation E1 
LEFT OUTER JOIN EnrollmentsByLocation E2 
ON E1.Location = E2.Location 
AND E1.milestone_description = E2.milestone_description 
AND E1.Term - E2.Term = 1; 
+1

你想在百分比計算中避免空值(用null替換爲0)還是避免使用空值的行(使用where子句來消除空行)? – Vinnie 2012-07-06 17:00:38

+0

不能用0替換空行(比如,用'COALESCE'),你會得到一個被零除的錯誤。如果前面的術語不存在,是否會使百分比更改爲100% - 那麼您應該使用簡單的「CASE」語句並輸出100? – 2012-07-06 17:14:35

+0

你說你想避免NULL,但是你不會說你想做什麼樣的行爲。 – MatBailie 2012-07-06 17:15:45

回答

1

什麼味道SQL?避免空值是什麼意思?你是否試圖避免被零錯誤劃分,或者不顯示空值?使用ISNULL,但圍繞除數包圍NULLIF以避免被零除錯誤。這處理兩者。 或者你是否試圖消除它們返回?如果是這樣,看看你的LEFT加入或WHERE條款。 您需要將您的別名放在[Prev_Enrl_Tot]上。

ISNULL(Round(((E1.[Enrollment Total] - [Prev_Enrl_Tot])/NULLIF([Prev_Enrl_Tot],0)) * 100,2),0) AS Percent_Change 
相關問題