列出热门项目*和*是否已购买(一个SQL查询)



以下是我正在处理的关键字段:(它们来自另外两个表的联接,还有一些额外的字段,比如我要过滤的日期,但这些我可以处理。)

客户类型(文本)、项目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

最新更新