多次选择top(x)

Pat*_*ick 4 sql sql-server sql-server-2008

对不起,垃圾标题,但希望这将解释:

鉴于表

 name     |   data
---------------------
   1      |   1000
   1      |   2000
   1      |   3000
   2      |   1500
   2      |   2500
   2      |   3500
Run Code Online (Sandbox Code Playgroud)

我希望能够为数据值排序的所有名称选择顶部(x).因此,如果x = 2,则返回

 name     |   data
---------------------
   1      |   2000
   1      |   3000
   2      |   2500
   2      |   3500
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 9

;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
Run Code Online (Sandbox Code Playgroud)