sql >> Database teknologi >  >> RDS >> Sqlserver

SQL-forespørgsel til at sammenligne produktsalg efter måned

Case Statement er min bedste sql-ven. Du skal også bruge en tabel med tid til at generere dine 0 omdrejninger i begge måneder.

Antagelser er baseret på tilgængeligheden af ​​følgende tabeller:

og

Eksempel 1 uden tomme rækker:

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

RETUR:

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

Eksempel 2 med tomme rækker:Jeg vil bruge en underforespørgsel (men andre vil måske ikke) og returnerer en tom række for hver produkt- og månedskombination.

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

RETUR:

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

Bemærk, at de fleste rapporteringsværktøjer vil gøre denne krydstabulator- eller matrixfunktionalitet, og nu hvor jeg tænker på det, har SQL Server 2005 pivotsyntaks, der også vil gøre dette.

Her er nogle yderligere ressourcer.CASEhttp://www.4guysfromrolla.com/webtech/ 102704-1.shtml SQL SERVER 2005 PIVOThttp://msdn.microsoft.com/en-us /library/ms177410.aspx



  1. Finde duplikerede poster i en tabel

  2. JPA-forespørgsel i flere tabeller med mange-til-mange-relation

  3. Betydning af id =LAST_INSERT_ID(id)

  4. Hvorfor Asp.net MVC4 ikke kan bruge den cookiefrie SQL Server Session-tilstandslagring