2017-02-23 5 views
-1

Ich habe eine SQL-Abfrage erstellt, die mir die Top-10-Kunden zurückgibt, die die höchsten ausstehenden haben. Das Outstanding ist auf Produktebene (jedes Produkt hat seine eigenen hervorragend).SELECT TOP 10 Zeilen

enter image description here

Untill jetzt alles funktioniert gut, mein einziges Problem ist, dass, wenn ein bestimmte Kunde mehr als 1 Produkt hat dann das zweite Produkt oder mehr soll unter dem gleichen customer_id wie im zweiten Bild kategorisiert werden (weil die erstes Produkt, das die höchsten ausstehenden Ansteckungen hat das zweite Produkt, das einen niedrigeren ausstehenden haben kann, dass die anderen 9 Klienten von Spitzen 10). Wie kann ich meine Abfrage ändern, um dies zu tun? Ist es in SQL Server 2012 möglich?

enter image description here

Meine Frage ist:

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

[why-may-i-nicht-upload-Bilder-of-code] (http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557#285557) –

+0

So tun Sie Wollen Sie die 10 höchsten Kunden insgesamt über alle Produkte oder die 10 höchsten Einzelprodukte auszeichnen? – iamdave

+0

@iamdave Ich möchte die Top 10 der höchsten Kunden durch herausragende, aber wenn möglich, sollte die herausragende für jedes Produkt (wie im zweiten Bild) aufgeteilt werden. – Marin

Antwort

1

Sie müssen zuerst die Top-Kunden berechnen, dann alle ihre Produkte herausziehen. Sie können dies mit einem allgemeinen Tabellenausdruck tun.

Wie Sie keine Testdaten zur Verfügung gestellt haben dies nicht getestet, aber ich denke, es wird für Sie arbeiten:

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

vielen Dank für die Unterstützung. In der Tat zeigt die Abfrage folgende Fehlermeldung: Ungültiger Spaltenname 'S90T01_GROSS_EXPOSURE_THSD_EUR'. – Marin

+0

@Marin Ah, falscher Alias ​​in der Reihenfolge nach, versuche es jetzt. – iamdave

+0

danke soooo viel :) Du bist ein Lebensretter! Ich habe ein wenig die obige Abfrage bearbeitet, so dass ich die Informationen nur für eine bestimmte YEAR_MONTH abrufen konnte, denn wenn Sie sie nicht angeben, wird der gesamte Verlauf des Clients angezeigt. Beste Grüße von mir :) – Marin