我有点难过,我怎么会这样做.
我有一个非常基本的查询,它目前按年份和月份返回每种产品的销售额.它按年/月分组,并总结数量.这将为每个产品/年/月组合返回一行,其中有一个销售.
如果一个月没有销售,那么就没有数据.
我希望我的查询能够在我的日期范围内为每个年/月的每个产品返回一行数据,无论是否有实际订单.
如果没有订单,那么我可以为该产品/年/月返回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
Run Code Online (Sandbox Code Playgroud) 我试图只返回包含特定字段中的文本[XXXX]的值.我的查询返回有4位数字的值,因为我假设SQL服务器将[XXXX]视为4位数的任何数字.
我在下面有一个测试查询,带有值列表来演示问题.
select X.VadDesc
From (VALUES
('Product AAAA Description'),
('Product BBBB Description'),
('Product [XXXX] Description'),
('Product2 [XXXX] Description'),
('Product 2 [AAAA] Description'),
('Product X 1234 Description'),
('Product X 1235 Description'),
('Product X 1236 Description'),
('Product X 1237 Description')
) as X (VadDesc)
Where X.VadDesc like '%[XXXX]%'
Run Code Online (Sandbox Code Playgroud)
我的查询应该只返回:
Product [XXXX] Description
Product2 [XXXX] Description
Run Code Online (Sandbox Code Playgroud)
但它返回:
Product [XXXX] Description
Product2 [XXXX] Description
Product X 1234 Description
Product X 1235 Description
Product X 1236 Description
Product X 1237 Description
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我不只是想寻找XXXX,因为这可能是我不想返回的行.
我有一个查询DATA,从一些UNION ALL连接的查询返回一组结果作为一个表调用.
我正在做ROW_NUMBER()这个,以获取特定分组的行号(WorksOrderNo)
ROW_NUMBER() Over(partition by Data.WorksOrderNo order by Data.WorksOrderNo) as RowNo,
Run Code Online (Sandbox Code Playgroud)
是否存在ROW_Count可以指定分区的等效函数,并返回该分区的行数?
ROW_Count() Over(partition by Data.WorksOrderNo order by Data.WorksOrderNo) as RowNo ???
Run Code Online (Sandbox Code Playgroud)
原因是,这是用于驱动报表布局的查询.作为其中的一部分,我需要根据每个WorksOrderNo的总行数是否大于1进行格式化.
因此,例如,如果工作订单有三行,则该row_number函数当前返回1,2和3,其中行计数将在每行返回3.