以下是我正在使用的关键字段:(它们来自另外两个表的连接,还有一些额外的字段,比如我将要过滤的日期,但我可以处理的那些东西。)
客户类型(文本),项目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表示购买客户的是/否标志。
谢谢!
答案 0 :(得分:1)
假设你的表#Orders中有你的列,而表#CustomerIds中有“客户ID列表”:
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