sélectionner le haut (x) plusieurs fois

Désolé pour le titre des ordures mais j'espère que cela va expliquer:

Compte tenu du tableau

name | data --------------------- 1 | 1000 1 | 2000 1 | 3000 2 | 1500 2 | 2500 2 | 3500 

Je veux être en mesure de sélectionner le sumt (x) pour tous les noms classés par la valeur de données. Donc, si x = 2, le return sera

  name | data --------------------- 1 | 2000 1 | 3000 2 | 2500 2 | 3500 

 ;with cte AS ( SELECT name, data, ROW_NUMBER() OVER (PARTITION BY name ORDER BY data DESC) AS RN FROM YourTable ) SELECT name, data FROM cte WHERE RN<=2 ORDER BY name, data 

Un moyen un peu universel serait ( n'avait pas vu les balises éditées qui ont spécifié le server sql )

 Select name, data From <table> tbl Where data In ( Select Top 2 Distinct data From <table> Where name = tbl.name Order By data Desc )