2017-12-23 8 views
0

Kunden haben die Möglichkeit, mehrere Produkte zu kaufen, und ich habe die Abfrage erstellt, die die Auslastung für jedes Kundenprodukt von Workload berechnet. Und es funktioniert.SQL Query mit CASE und MAX Wert

Wie jedoch gehe ich bei der Auswahl der Workload mit der höchsten Auslastung? Ich habe mehrere Möglichkeiten ausprobiert, aber es scheint nicht zu funktionieren.

Hier ist, was ich bekommen: enter image description here

Hier ist, was ich will: enter image description here

with Usage as 
    (
     select 
      [ID] 
      ,[Workload] 
      ,[QE] 
      ,[EE] 
      ,(CASE 
       WHEN QE <= 0 THEN '0' 
       ELSE CAST([AE] as float)/[QE] 
      END) as Utilization 
     from [source].[Usage] 
    ) 

select 
    O.[ID] 
    ,O.[Workload] 
    ,O.[QE] 
    ,O.[EE] 
    ,max(cast([Utilization] as decimal)) as 'Utilization' 
FROM Usage O 
Group by O.[ID], O.[Workload], O.[QE],O.[EE] 
+0

Sie sollten sich bemühen, sein ** ** konsistent mit, wie Sie die SQL-Schlüsselwörter schreiben - * entweder * schreiben sie in Groß (SELECT, FROM) oder schreiben Sie sie in allen Kleinbuchstaben (wählen, von), oder im gemischten Fall (Wählen, Von) - aber bitte ** wählen Sie einen Stil ** und dann ** bleiben Sie dabei ** - mischen Sie nicht alle zusammen! –

Antwort

2

Nur Fensterfunktionen verwenden. Hier ist eine Möglichkeit:

with Usage as (
     select [ID], [Workload], [QE], [EE], 
      MAX(CASE WHEN QE <= 0 THEN 0 ELSE CAST([AE] as float)/NULLIF([QE], 0) 
       END) as Utilization 
     from [source].[Usage] u 
     group by [ID], [Workload], [QE], [EE] 
    ) 
select u.* 
from (select u.*, row_number() over (partition by id order by utilization desc) as seqnum 
     from Usage u 
    ) u 
where seqnum = 1; 
+0

Danke für die Rückmeldung. Ich erhalte folgende Fehlermeldung: "Divide by zero error found." – emie

+0

Ich habe es herausgefunden. Vielen Dank!! – emie