【发布时间】:2013-11-01 16:18:12
【问题描述】:
我有点难过我该怎么做。
我有一个非常基本的查询,目前按年和月返回每种产品的销售额。 它按年/月分组,并汇总数量。 这将为有销售的每个产品/年/月组合返回一行。
如果一个月没有销售,则没有数据。
我希望我的查询为我的日期范围内的每个年/月的每个产品返回一行数据,无论是否实际有订单。
如果没有订单,那么我可以为该产品/年/月返回 0。
以下是我的示例查询。
Declare @DateFrom datetime, @DateTo Datetime
Set @DateFrom = '2012-01-01'
set @DateTo = '2013-12-31'
select
Convert(CHAR(4),order_header.oh_datetime,120) + '/' + Convert(CHAR(2),order_header.oh_datetime,110) As YearMonth,
variant_detail.vad_variant_code,
sum(order_line_item.oli_qty_required) as 'TotalQty'
From
variant_Detail
join order_line_item on order_line_item.oli_vad_id = variant_detail.vad_id
join order_header on order_header.oh_id = order_line_item.oli_oh_id
Where
(order_header.oh_datetime between @DateFrom and @DateTo)
Group By
Convert(CHAR(4),order_header.oh_datetime,120) + '/' + Convert(CHAR(2),order_header.oh_datetime,110),
variant_detail.vad_variant_code
【问题讨论】:
-
我认为你需要一个 12 个月的表,简单的 int 列,然后你加入你的查询。
-
问题是我不能改变数据库来添加一个表来做到这一点。
-
按照米海的建议做,但不要创建一个真实的表,而是使用一个表变量:
declare @mytable table (id int, name varchar(20))然后将名称插入到表变量中并将其加入到您的查询中。 -
你可以使用 CTE 来制作这个。您在网络上有示例
-
确保这个临时表有年月组合,而不仅仅是月。永远不知道输入参数是什么。
标签: sql sql-server date