2013-02-21 4 views
2

позволяет сказать, что там был набор данных, как этотПолучить Top 5 из каждого отдельного значения столбца

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' 

И без использования курсора.

ответ

7

Попробуйте

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

Edit: Я думаю, что это то, что вы хотите. Если это не так, просто комментируйте, и мы можем работать над этим.

+0

Скотч избил меня. :) См. Также http://weblogs.sqlteam.com/jeffs/archive/2007/03/30/More-SQL-Server-2005-Solutions.aspx –

+0

Спасибо, Скотч .. этот вопрос мне тоже помог. – Radhi

Смежные вопросы