sql >> データベース >  >> RDS >> Sqlserver

月ごとの製品売上を比較する SQL クエリ

    Case ステートメントは、SQL の親友です。また、両方の月で 0 回転を生成するための時間の表も必要です。

    仮定は、次のテーブルの可用性に基づいています:

    そして

    例 1 空行なし:

    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
    

    返品:

    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
    

    空の行を含む例 2:サブクエリを使用します (ただし、そうでない場合もあります)。すべての製品と年月の組み合わせに対して空の行が返されます。

    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
    

    返品:

    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
    

    ほとんどのレポート ツールがこのクロス集計またはマトリックス機能を実行することに注意してください。SQL Server 2005 には、これを実行するピボット構文もあると思います。

    ここにいくつかの追加リソースがあります。 102704-1.shtml SQL Server 2005 PIVOThttp://msdn.microsoft.com/en-us /library/ms177410.aspx



    1. テーブル(日時フィールド)で最新のレコードを選択します

    2. ArraylistのSQLitedb値をListviewに取得する方法

    3. MySqlに日付/時刻を保存するのに最適な方法は?

    4. データベース エンジンは同時挿入をどのように処理しますか?