我有一个每月状态数据库视图,我需要基于该视图构建报告。视图中的数据如下所示:
Category | Revenue | Yearh | Month
Bikes 10 000 2008 1
Bikes 12 000 2008 2
Bikes 12 000 2008 3
Bikes 15 000 2008 1
Bikes 11 000 2007 2
Bikes 11 500 2007 3
Bikes 15 400 2007 4
...等等
该视图具有产品类别、收入、年份和月份。我想创建一个比较 2007 年和 2008 年的报告,显示没有销售的月份为 0。所以报告应该是这样的:
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
需要注意的关键是第 1 个月只有 2008 年的销售额,因此 2007 年为 0。此外,第 4 个月只有 2008 年没有销售额,因此为 0,而 2007 年有销售额并且仍然显示。
此外,该报告实际上是针对财政年度的 - 因此,如果 2007 年或 2008 年的第 5 个月没有销售,我希望两者都为 0 的空列。
我得到的查询看起来像这样:
SELECT
SP1.Program,
SP1.Year,
SP1.Month,
SP1.TotalRevenue,
IsNull(SP2.TotalRevenue, 0) AS LastYearTotalRevenue
FROM PVMonthlyStatusReport AS SP1
LEFT OUTER JOIN PVMonthlyStatusReport AS SP2 ON
SP1.Program = SP2.Program AND
SP2.Year = SP1.Year - 1 AND
SP1.Month = SP2.Month
WHERE
SP1.Program = 'Bikes' AND
SP1.Category = @Category AND
(SP1.Year >= @FinancialYear AND SP1.Year <= @FinancialYear + 1) AND
((SP1.Year = @FinancialYear AND SP1.Month > 6) OR
(SP1.Year = @FinancialYear + 1 AND SP1.Month <= 6))
ORDER BY SP1.Year, SP1.Month
这个查询的问题是它不会返回我上面示例数据中的第四行,因为我们在 2008 年没有任何销售,但我们实际上在 2007 年做到了。
这可能是一个常见的查询/问题,但是在做了这么长时间的前端开发之后,我的 SQL 已经生锈了。任何帮助是极大的赞赏!
哦,顺便说一句,我正在使用 SQL 2005 进行此查询,所以如果有任何有用的新功能可以帮助我,请告诉我。