我试图计算产品在一个月内的总销售额,但我希望它包含任何“空”月份(无销售),并且只选择最近12个月。SQL Server:计算包含空月份的月总销售额
这是我的代码到目前为止。
declare
@ProductNo int
set @ProductNo = 1234
SELECT
YEAR(o.OrderDate) as 'Year', MONTH(o.OrderDate) as 'Month', sum(Amount) as 'Units sold',[ProductNo]
FROM [OrderLine] ol
inner join [Order] o on ol.OrderNo = o.OrderNo
where ProductNo = @ProductNo
Group by ProductNo, YEAR(o.OrderDate), Month(o.OrderDate)
Order by ProductNo, YEAR(o.OrderDate), Month(o.OrderDate)
这将返回
Year Month Units sold
2011 6 2
2011 10 1
2011 11 1
2012 2 1
但我想它返回。
Year Month Units sold
2011 4 0
2011 5 0
2011 6 2
2011 7 0
2011 8 0
2011 9 0
2011 10 1
2011 11 1
2011 12 0
2012 1 0
2012 2 2
2012 3 0
我使用SQL Server 2008 R2 SP1
可能重复:http://stackoverflow.com/questions/9691824/handling-non-existent-values-in-sql-query-expression-for-ssrs-图表/ 9692399#9692399 – 2012-03-15 07:49:17
真的不喜欢创建一个额外的表只是为了持有几个月的想法。 – gulbaek 2012-03-15 07:53:08
你可以做的是创建一个表值函数来返回给定开始和结束日期的月份表。您可以分别使用MIN(OrderDate)和MAX(OrderDate)。我们在环境中使用类似的东西。 – tobias86 2012-03-15 07:55:59