2012-05-21 2 views
0

기본적으로 SQL Server 쿼리를 사용하여 2 년 동안 백분율 차이를 계산하려고합니다.SQL Server 쿼리에서 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 함께 : 여기

내 쿼리입니다?

+0

을'Budgets.Year' 무엇 데이터 타입? varchar? int? 날짜 시간? –

+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