选择前10行

时间:2017-02-23 15:33:13

标签: sql sql-server-2012

我已经构建了一个SQL查询,它返回了前十名最优秀的客户。优秀的产品水平(每个产品都有自己的优秀产品)。

enter image description here

直到现在一切正常,我唯一的问题是,如果某个客户有超过1个产品,那么第二个产品或更多应该在同一个customer_id下分类,如第二张图片(因为第一个产品最高突出的传染性第二产品可能比其他9个客户排名前10位。 如何修改我的查询才能这样做?是否可以在SQL Server 2012中使用?

enter image description here

我的查询是:

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

1 个答案:

答案 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;
相关问题