2017-02-23 97 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