Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL-Abfrage zum Vergleich der Produktverkäufe nach Monat

Das Case Statement ist mein bester SQL-Freund. Sie benötigen auch eine Tabelle für die Zeit, um in beiden Monaten Ihre 0-Umdrehung zu erzielen.

Annahmen basieren auf der Verfügbarkeit der folgenden Tabellen:

und

Beispiel 1 ohne Leerzeilen:

select
    Category
    ,month
    ,SUM(CASE WHEN YEAR = 2008 THEN Revenue ELSE 0 END) this_year
    ,SUM(CASE WHEN YEAR = 2007 THEN Revenue ELSE 0 END) last_year

from
    sales

where
    year in (2008,2007)

group by
    Category
    ,month

RÜCKGABE:

Category  |  Month  |  Rev. This Year  |  Rev. Last Year
Bikes          1          10 000               0
Bikes          2          12 000               11 000
Bikes          3          12 000               11 500
Bikes          4          0                    15 400

Beispiel 2 mit leeren Zeilen:Ich werde eine Unterabfrage verwenden (aber andere möglicherweise nicht) und eine leere Zeile für jede Kombination aus Produkt und Jahr und Monat zurückgeben.

select
    fill.Category
    ,fill.month
    ,SUM(CASE WHEN YEAR = 2008 THEN Revenue ELSE 0 END) this_year
    ,SUM(CASE WHEN YEAR = 2007 THEN Revenue ELSE 0 END) last_year

from
    sales
    Right join (select distinct  --try out left, right and cross joins to test results.
                   product
                   ,year
                   ,month
               from
                  sales --this ideally would be from a products table
                  cross join tm
               where
                    year in (2008,2007)) fill


where
    fill.year in (2008,2007)

group by
    fill.Category
    ,fill.month

RÜCKGABE:

Category  |  Month  |  Rev. This Year  |  Rev. Last Year
Bikes          1          10 000               0
Bikes          2          12 000               11 000
Bikes          3          12 000               11 500
Bikes          4          0                    15 400
Bikes          5          0                    0
Bikes          6          0                    0
Bikes          7          0                    0
Bikes          8          0                    0

Beachten Sie, dass die meisten Reporting-Tools diese Kreuztabellen- oder Matrixfunktionalität ausführen, und jetzt, wo ich darüber nachdenke, hat SQL Server 2005 eine Pivot-Syntax, die dies ebenfalls tut.

Hier sind einige zusätzliche Ressourcen. 102704-1.shtml SQL SERVER 2005 PIVOThttp://msdn.microsoft.com/en-us /library/ms177410.aspx