2016-05-24 6 views
0

Hier ist die Kriterien ich suche (1) Rangdaten nach Regionen (2) Top-3 für zwei Regionen und Top-5 für eine andere RegionSQL Ausgang ein Rang von Elementen eines unterschiedlicher maximaler Rang pro Stück angegeben

umfassen

ich bin in der Lage unter den Kriterien (1) unter Verwendung der Abfrage zu erhalten:

select rank() over (partition by region order by sales_score desc) rank_by_region, 
     region, 
     sales_person 
     sales_score 
from sales_owner.data 

Wenn ich drei Regionen (Nord, Süd, West) erhalten. Wie würde ich den Rang, den die Ausgabe enthalten würde top 3 für Nord und Süd und top 5 für West bestellen?

Jede Hilfe sehr geschätzt!

Antwort

4

Verwenden Sie einen where Zustand mit or.

select region,sales_person,sales_score from 
(
select rank() over (partition by region order by sales_score desc) rank_by_region, 
     region, 
     sales_person 
     sales_score 
from sales_owner.data 
) t 
where (region in ('North','South') and rank_by_region <= 3) 
or (region = 'West' and rank_by_region <= 5) 
+0

Diese Lösung ist 100% richtig. Es kann ein bisschen effizienter sein, wenn es geschrieben wird, wo rank_by_region <= 3 oder (region = 'West' und rank_by_region <= 5) '- obwohl ich sagen würde, dass vkps Lösung besser lesbar ist, was ein wichtiger Vorteil ist. – mathguy

+0

super vielen dank! – Ariel