获取每个不同列值的前5位

Con*_*eak 2 t-sql sql-server sql-server-2008

可以说有一个像这样的数据集

Group | Name (Unique)
A     | Joe
B     | Bob
C     | Jill
B     | James
Run Code Online (Sandbox Code Playgroud)

如果每个组中大约有50个(A,B,C),那么如何在不执行此类操作的情况下返回每个组中只有前5名的结果

SELECT TOP 5 * FROM TABLE WHERE GROUP = 'A' UNION ALL
SELECT TOP 5 * FROM TABLE WHERE GROUP = 'B' UNION ALL
SELECT TOP 5 * FROM TABLE WHERE GROUP = 'C'
Run Code Online (Sandbox Code Playgroud)

并且最好不使用光标.

Sco*_*tch 7

尝试

SELECT GROUP, Name FROM(
 SELECT Group, Name, RANk() OVER (Partition By GROUP ORDER By Name DESC) as rankname
   FROM YourTable)
    WHERE rankname <= 5
Run Code Online (Sandbox Code Playgroud)

编辑:我认为这就是你想要的.如果不是,只需评论,我们就可以开展工作.