sql >> Databáze >  >> RDS >> Sqlserver

SQL dotaz pro porovnání prodeje produktů podle měsíce

The Case Statement je můj nejlepší přítel sql. Potřebujete také tabulku času, abyste vygenerovali 0 otáček v obou měsících.

Předpoklady jsou založeny na dostupnosti následujících tabulek:

a

Příklad 1 bez prázdných řádků:

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

VRÁCENÍ:

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

Příklad 2 s prázdnými řádky:Použiji dílčí dotaz (ale ostatní nemusí) a vrátím prázdný řádek pro každou kombinaci produktu a roku a měsíce.

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

VRÁCENÍ:

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

Všimněte si, že většina nástrojů pro vytváření sestav bude tuto funkci křížové tabulky nebo matice provádět, a teď, když o tom přemýšlím, SQL Server 2005 má pivotní syntaxi, která to udělá také.

Zde jsou některé další zdroje.CASEhttp://www.4guysfromrolla.com/webtech/ 102704-1.shtml SQL SERVER 2005 PIVOThttp://msdn.microsoft.com/en-us /library/ms177410.aspx



  1. Efektivně vybírejte náhodné řádky z velké sady výsledků pomocí LINQ (ala TABLESAMPLE)

  2. atomové srovnání a swap v databázi

  3. Volejte uloženou proceduru obsahující kolekci záznamů pomocí callproc v pythonu

  4. Jak zabránit někomu v návratu na předchozí stránku?