以下是我正在处理的关键字段:(它们来自另外两个表的联接,还有一些额外的字段,比如我要过滤的日期,但这些我可以处理。)
客户类型(文本)、项目ID(编号)、销售额%s(编号)
如果可能的话,我想用一个问题回答两个问题:
1) 对于给定的客户类型列表,前25项(按销售额总和)是什么
2) 使用步骤1中生成的25个项目的列表,给定的客户ID列表是否购买了每个指定项目?
所以我的最终结果是这样的:
(header) Item # | Customer Purchased?
(row 01) Item 1123 | Yes
(row 02) Item 2452 | Yes
(row 03) Item 3354 | No
...
(row 25) Item 2554 | No
商品编号将以递减的销售量列出(在指定的客户类别内),我将测试销售额总和是否>0,以触发所购买客户的"是/否"标志。
谢谢!
假设您的列在表#Orders中,"客户ID列表"在表#CustomerIds:中
create table #Orders (CustomerId int, CustomerType varchar(10), ItemId int, Sales decimal);
create table #MyCustomers (CustomerId int);
你可以试试这样的东西:
declare @CustomerType varchar(10) = 'Ugly';
with MarkedOrders as (
select
o.ItemId,
o.Sales,
case when mc.CustomerId is not null then 1 else 0 end IsMyCustomer
from
Orders o
left join #MyCustomers mc
on mc.CustomerId = o.CustomerId
where
o.CustomerType = @CustomerType
)
select top 25
o.ItemId,
max(IsMyCustomer) IsPurchasedByMyCustomer
from MarkedOrders o
group by o.ItemId
order by sum(o.Sales) desc