2017-02-23 162 views
-1

我已经构建了一个SQL查询,它返回了前10名具有最高优秀的客户。在产品层面(每个产品都有自己的优秀)。SELECT TOP 10 rows

enter image description here

直到现在一切正常,我唯一的问题是,如果某客户有更多的则1个产品则第二个产品或更多的应该相同CUSTOMER_ID下第二张照片进行分类一样(因为第一种产品具有最高的突出传染率,第二种产品可能比前10名的其他9个客户低)。 我该如何修改我的查询才能做到这一点?在SQL Server 2012中可能吗?

enter image description here

我的查询是:

select top 10 CUSTOMER_ID 
      ,S90T01_GROSS_EXPOSURE_THSD_EUR 
      ,S90T01_COGNOS_PROD_NAME 
      ,S90T01_DPD_C 
      ,PREVIOUS_BUCKET_DPD_REP 
      ,S90T01_BUCKET_DPD_REP 
from [dbo].[DM_07MONTHLY_DATA] 
where S90T01_CLIENT_SEGMENT = 'PI' 
     and YYYY_MM = '2017_01' 
group by CUSTOMER_ID 
     ,S90T01_GROSS_EXPOSURE_THSD_EUR 
     ,S90T01_COGNOS_PROD_NAME 
     ,S90T01_DPD_C 
     ,PREVIOUS_BUCKET_DPD_REP 
     ,S90T01_BUCKET_DPD_REP 
order by S90T01_GROSS_EXPOSURE_THSD_EUR desc; 
+1

[为什么-MAY-I-没有上传图像-的代码( http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557#285557) –

+0

那么你呢想要在所有产品或10个最高的个人产品中拥有“杰出”的10位最高客户? – iamdave

+0

@iamdave我希望杰出的十大最高客户,但如果可能的话,应该为每种产品分配优秀(如第二张图)。 – Marin

回答

1

你需要先计算顶部客户,然后拉出他们的产品。你可以用Common Table Expression来做到这一点。

如你没有提供任何的测试数据,这是未经测试,但我认为它会为你工作:

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; 
+0

非常感谢您的支持。实际上查询显示以下错误消息:无效的列名称'S90T01_GROSS_EXPOSURE_THSD_EUR'。 – Marin

+0

@Marin啊,'order by'中的错误别名,现在就试试。 – iamdave

+0

谢谢soooo :)你是一个救世主!我编辑了一下上面的查询,所以我只能获取特定YEAR_MONTH的信息,因为如果不指定它,它将显示客户端的整个历史记录。最好的问候:) – Marin