0

基本的に、SQLServerクエリを使用して2年間のパーセンテージの差を計算したいと思います。

何らかの理由で、年フィールドに-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にあり、望ましい結果を得るために私が何ができるか考えていますか?

4

1 に答える 1

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 
于 2012-05-21T13:23:46.623 に答える