2013-02-21 263 views
2

比方说,有这样的获取每一个不同的列值

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

如果各组的约50集的前5个(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' 

并且最好不使用游标。

回答

7

尝试

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

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

+0

苏格兰威士忌打败了我。 :)另请参见http://weblogs.sqlteam.com/jeffs/archive/2007/03/30/More-SQL-Server-2005-Solutions.aspx – 2013-02-21 04:13:32

+0

感谢苏格兰..这个查询也帮助我。 – Radhi 2017-01-18 06:30:46