我已经构建了一个SQL查询,它返回了前十名最优秀的客户。优秀的产品水平(每个产品都有自己的优秀产品)。
直到现在一切正常,我唯一的问题是,如果某个客户有超过1个产品,那么第二个产品或更多应该在同一个customer_id下分类,如第二张图片(因为第一个产品最高突出的传染性第二产品可能比其他9个客户排名前10位。 如何修改我的查询才能这样做?是否可以在SQL Server 2012中使用?
我的查询是:
<div ng-repeat="group in groups track by group.id">
<h1 ng-bind="group.name"></h1>
<div ng-repeat="item in items | filter: {group_id: group.id} track by $index">
<div ng-bind="item.name"></div>
</div>
</div>
答案 0 :(得分:1)
您需要首先计算顶级客户,然后提取所有产品。您可以使用公用表表达式执行此操作。
由于您尚未提供任何测试数据,这是未经测试的,但我认为它适用于您:
with top10 as
(
select top 10 CUSTOMER_ID
,sum(S90T01_GROSS_EXPOSURE_THSD_EUR) as TOTAL_S90T01_GROSS_EXPOSURE_THSD_EUR
from [dbo].[DM_07MONTHLY_DATA]
where S90T01_CLIENT_SEGMENT = 'PI'
and YYYY_MM = '2017_01'
group by CUSTOMER_ID
order by TOTAL_S90T01_GROSS_EXPOSURE_THSD_EUR desc
)
select m.CUSTOMER_ID
,m.S90T01_GROSS_EXPOSURE_THSD_EUR
,m.S90T01_COGNOS_PROD_NAME
,m.S90T01_DPD_C
,m.PREVIOUS_BUCKET_DPD_REP
,m.S90T01_BUCKET_DPD_REP
from [dbo].[DM_07MONTHLY_DATA] m
join top10 t
on m.CUSTOMER_ID = t.CUSTOMER_ID
order by t.TOTAL_S90T01_GROSS_EXPOSURE_THSD_EUR desc
,m.S90T01_GROSS_EXPOSURE_THSD_EUR;