2017-12-29 14 views
0

SQL Server 2008および を使用して、一時的なデータの目的で2015年12月5日の 'Today'値を使用します。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

関連する問題