5

假设有一个这样的数据集

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

如果每组(A,B,C)大约有 50 个,我如何返回一个只有每组前 5 个的结果而不做这样的事情

SELECT TOP 5 * FROM TABLE WHERE Grp = 'A' UNION ALL
SELECT TOP 5 * FROM TABLE WHERE Grp = 'B' UNION ALL
SELECT TOP 5 * FROM TABLE WHERE Grp = 'C'
4

1 回答 1

10

尝试

SELECT Grp, Name FROM(
 SELECT Grp, Name, RANK() OVER (Partition By Grp ORDER By Name DESC) as rankname
   FROM YourTable)
    WHERE rankname <= 5

编辑:我认为这就是你想要的。如果不是,请发表评论,我们可以解决它。

于 2013-02-21T04:12:08.113 回答