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

时间:2013-02-21 04:06:40

标签: sql-server sql-server-2008 tsql

假设有一个像这样的数据集

Group | Name (Unique)
A     | Joe
B     | Bob
C     | Jill
B     | James

如果每组中有大约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'

最好不要使用光标。

1 个答案:

答案 0 :(得分:7)

尝试

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

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