我有一个每月状态数据库视图我需要基于的生成报表。在视图中的数据看起来是这样的:用于比较产品销售额的SQL查询
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年有销售,并且仍然出现。
此外,该报告实际上是对财政年度 - 所以我很想有两种,如果有在说5月份为2007年任或2008
我看起来查询没有销售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这个查询,所以如果有任何有用的新功能,可能会帮助我让我知道。