Báo cáo Vụ án là người bạn sql tốt nhất của tôi. Bạn cũng cần một bảng về thời gian để tạo vòng quay 0 của mình trong cả hai tháng.
Các giả định dựa trên sự sẵn có của các bảng sau:
và
Ví dụ 1 không có hàng trống:
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
QUAY LẠI:
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
Ví dụ 2 với các hàng trống:Tôi sẽ sử dụng một truy vấn phụ (nhưng những người khác có thể không) và sẽ trả về một hàng trống cho mọi kết hợp sản phẩm và năm tháng.
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
QUAY LẠI:
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
Lưu ý rằng hầu hết các công cụ báo cáo sẽ thực hiện chức năng bảng chéo hoặc ma trận này và bây giờ tôi nghĩ về nó, SQL Server 2005 có cú pháp pivot cũng sẽ thực hiện điều này.
Dưới đây là một số tài nguyên bổ sung.CASE http://www.4guysfromrolla.com/webtech/ 102704-1.shtml SQL SERVER 2005 PIVOT http://msdn.microsoft.com/en-us /library/ms177410.aspx