Pernyataan Kasus adalah teman sql terbaik saya. Anda juga memerlukan tabel waktu untuk menghasilkan 0 putaran di kedua bulan.
Asumsi didasarkan pada ketersediaan tabel berikut:
dan
Contoh 1 tanpa baris kosong:
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
PENGEMBALIAN:
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
Contoh 2 dengan baris kosong:Saya akan menggunakan sub kueri (tetapi yang lain mungkin tidak) dan akan mengembalikan baris kosong untuk setiap kombo produk dan tahun bulan.
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
PENGEMBALIAN:
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
Perhatikan bahwa sebagian besar alat pelaporan akan melakukan fungsi tab silang atau matriks ini, dan sekarang menurut saya SQL Server 2005 memiliki sintaks pivot yang akan melakukan ini juga.
Berikut adalah beberapa sumber tambahan. KASUShttp://www.4guysfromrolla.com/webtech/ 102704-1.shtml SQL SERVER 2005 PIVOThttp://msdn.microsoft.com/en-us /library/ms177410.aspx