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