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

时间:2013-12-05 15:35:44

标签: sql sql-server

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

客户类型(文本),项目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表示购买客户的是/否标志。

谢谢!

1 个答案:

答案 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