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)
并且最好不使用光标.
尝试
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)
编辑:我认为这就是你想要的.如果不是,只需评论,我们就可以开展工作.