2017-12-29 7 views
0

SQL Server 2008 및 임시 데이터 용도로 12155 년 12 월 5 일의 '오늘'값 사용.SQL 쿼리 작년 매출액과 전년도 비교

저는 오늘과 1 년 전 (오늘 같은 요일) 상점 당 총 판매액을 인계합니다.

 Declare @LastYearToday datetime, @Today datetime 

    -- @LastYearToday is business day on selected date, last year, same weekday 
    set @Today = '2017-12-5' 
    set @LastYearToday = Convert(date, (DATEADD(year, -1, getdate()+1))) 

    SELECT 

     StoreID, GrossSales, DF_BusinessDay 

    FROM DayFileSummary 

    WHERE 
    DF_BusinessDay = @LastYearToday OR 
    DF_BusinessDay = @Today 

    ORDER BY StoreID 

은 작년의 총 판매에서 오늘의 총 판매를 뺄 필요하지만, 진행하는 방법을 잘 모르겠습니다 : 이것은 내가 지금까지있는 것입니다. SQL에서이 작업을 수행합니까, 아니면 보고서에서 처리합니까? 보고서에는 같은 상점 ID로 날짜가 다른 총 매출 만 빼는 논리가 필요할 것 같습니다. 나는 이것을 생각하는 것 같아.

답변

0

이 작업을 수행 할 수 있습니다

WITH CTE 
AS 
(

    SELECT 
     StoreID, 
     SUM(CASE WHEN DF_BusinessDay = @LastYearToday 
       THEN GrossSales ELSE 0 END) AS LastYearGrossSales 
     SUM(CASE WHEN DF_BusinessDay = @Today 
       THEN GrossSales ELSE 0 END) AS TodayGrossSales 
    FROM DayFileSummary 
    WHERE DF_BusinessDay = @LastYearToday OR DF_BusinessDay = @Today 
    GROUP BY StoreID 

) 
SELECT StoreID, LastYearGrossSales - TodayGrossSales AS Result 
FROM CTE; 

또는를 : 사용 UNION : 그것을했다

WITH CTE 
AS 
(
    SELECT 
     StoreID, SUM(GrossSales) AS LastYearGrossSales, 0 AS TodayGrossSales 
    FROM DayFileSummary 
    WHERE DF_BusinessDay = @LastYearToday 
    GROUP BY StoreID 
    UNION ALL 
    SELECT StoreID, 0 AS LastYearGrossSales, SUM(GrossSales) AS TodayGrossSales 
    FROM DayFileSummary 
    WHERE DF_BusinessDay = @Today 
) 
SELECT StoreID, SUM(LastYearGrossSales) - SUM(TodayGrossSales) AS Result 
FROM CTE 
GROUP BY StoreID 
+0

. 감사! – Bootstrapper