SQL query to compare product sales by month

后端 未结 6 1047
无人共我
无人共我 2021-02-10 07:52

I have a Monthly Status database view I need to build a report based on. The data in the view looks something like this:

Category | Revenue  |  Yearh  |  Month
B         


        
6条回答
  •  礼貌的吻别
    2021-02-10 08:17

    The trick is to do a FULL JOIN, with ISNULL's to get the joined columns from either table. I usually wrap this into a view or derived table, otherwise you need to use ISNULL in the WHERE clause as well.

    SELECT 
        Program,
        Month,
        ThisYearTotalRevenue,
        PriorYearTotalRevenue
    FROM (
        SELECT 
            ISNULL(ThisYear.Program, PriorYear.Program) as Program,
            ISNULL(ThisYear.Month, PriorYear.Month),
            ISNULL(ThisYear.TotalRevenue, 0) as ThisYearTotalRevenue,
            ISNULL(PriorYear.TotalRevenue, 0) as PriorYearTotalRevenue
        FROM (
            SELECT Program, Month, SUM(TotalRevenue) as TotalRevenue 
            FROM PVMonthlyStatusReport 
            WHERE Year = @FinancialYear 
            GROUP BY Program, Month
        ) as ThisYear 
        FULL OUTER JOIN (
            SELECT Program, Month, SUM(TotalRevenue) as TotalRevenue 
            FROM PVMonthlyStatusReport 
            WHERE Year = (@FinancialYear - 1) 
            GROUP BY Program, Month
        ) as PriorYear ON
            ThisYear.Program = PriorYear.Program
            AND ThisYear.Month = PriorYear.Month
    ) as Revenue
    WHERE 
        Program = 'Bikes'
    ORDER BY 
        Month
    

    That should get you your minimum requirements - rows with sales in either 2007 or 2008, or both. To get rows with no sales in either year, you just need to INNER JOIN to a 1-12 numbers table (you do have one of those, don't you?).

提交回复
热议问题