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

Query SQL per confrontare le vendite di prodotti per mese

La dichiarazione del caso è il mio migliore amico di sql. Hai anche bisogno di una tabella per il tempo per generare il tuo 0 giri in entrambi i mesi.

Le ipotesi si basano sulla disponibilità delle seguenti tabelle:

e

Esempio 1 senza righe vuote:

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

RESI:

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

Esempio 2 con righe vuote:userò una query secondaria (ma altre potrebbero non farlo) e restituirò una riga vuota per ogni combinazione di prodotto e mese dell'anno.

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

RESI:

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

Tieni presente che la maggior parte degli strumenti di reporting eseguirà questa funzionalità a campi incrociati o matrice e ora che ci penso SQL Server 2005 ha una sintassi pivot che lo farà anche.

Ecco alcune risorse aggiuntive.CASEhttp://www.4guysfromrolla.com/webtech/ 102704-1.shtml PIVOT di SQL SERVER 2005http://msdn.microsoft.com/en-us /libreria/ms177410.aspx