2012-05-21 65 views
0

我想基本計算兩年內使用SQL Server查詢的百分比差異。在SQL Server查詢中獲取兩年以上的百分比

由於某些原因,當我在年份字段上使用-1時,它將返回null。

如果我今年不做-1,但我現在有工作,但顯然它返回100%,因爲它今年與今年比較,而不是今年與前一年比較。

這裏是我的查詢:

SELECT Year, 
     Sum(Amount) 
     AS Total, 
     (SELECT Sum(Amount) 
     FROM Purchases 
     WHERE Purchases.Year = Budgets.Year) 
     AS Actual, 
     (((SELECT Sum(Amount) 
      FROM Purchases 
      WHERE Purchases.Year = Budgets.Year)/Sum(Amount)) * 100) 
     AS 
     BudgetPercentage, 
     ((SELECT Sum(Amount) 
      FROM Budgets 
      WHERE Budgets.Year = Budgets.Year)/(SELECT Sum(Amount) 
               FROM Budgets 
               WHERE Budgets.Year = ( 
                 Budgets.Year - 1 
                     )) * 100 
     ) AS 
     PerYearPercentage 
FROM Budgets 
WHERE ServiceStationId = 1 
GROUP BY Year 

的問題是與Budgets.Year - 1,任何想法我能做些什麼,以獲得期望的結果?

+0

什麼數據類型是'Budgets.Year'? VARCHAR?詮釋?約會時間? –

+0

嗨,對不起,這是一個int – Armand

+0

所以,你想比較*每一年*與其前任,是否正確? –

回答

2

快速解決您的查詢將被簡單地不同的別名添加到子查詢,在那裏計算PerYearPercentage的表:

SELECT Year, 
     Sum(Amount) 
     AS Total, 
     (SELECT Sum(Amount) 
     FROM Purchases 
     WHERE Purchases.Year = Budgets.Year) 
     AS Actual, 
     (((SELECT Sum(Amount) 
      FROM Purchases 
      WHERE Purchases.Year = Budgets.Year)/Sum(Amount)) * 100) 
     AS 
     BudgetPercentage, 
     ((SELECT Sum(Amount) 
      FROM Budgets b 
      WHERE b.Year = Budgets.Year)/(SELECT Sum(Amount) 
              FROM Budgets b 
              WHERE b.Year = (Budgets.Year - 1)) * 100 
     ) AS 
     PerYearPercentage 
FROM Budgets 
WHERE ServiceStationId = 1 
GROUP BY Year 
+0

謝謝那就是訣竅,我現在需要添加的是在所有子查詢中檢查servicestationid的where子句,這要感謝一百萬個完美的工作 – Armand