2013-02-21 267 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