2016-08-08 8 views
2

各グループからn個の行を選択する方法に関する多くの回答があります。 しかし、私が探しています上位Nのグループからすべての行を選択することで、例えば、私は、以下のデータを持っている:私はトップ3のグループを選択したい場合は、以下のように私の意図した結果上位Nグループを選択するMicrosoft SQLサーバー

id group 
    1  a 
    2  a 
    3  b 
    4  c 
    5  c 
    6  d 
    7  d 
    ....... 

を:

1 a 
    2 a 
    3 b 
    4 c 
    5 c 

これをMicrosoft SQL Server 2008でどうすれば実現できますか?

+0

注:[予約済みキーワード](https://msdn.microsoft.com/en-us/library/ms189822.aspx)の 'group'は使用しないでください。 – Arulkumar

答えて

2

1つのオプションは、トップNグループを選択し、サブクエリを使用することです:

SELECT t1.id, t1.group 
FROM yourTable t1 
INNER JOIN 
(
    SELECT DISTINCT TOP(N) group 
    FROM yourTable 
    ORDER BY group 
) t2 
    ON t1.group = t2.group 
+0

ORDER BYをGROUP BYに変更しないでください –

+0

@TheShooter私は最初の 'N'グループを見つけるために' DISTINCT'を使っています。代わりに、 'DISTINCT'なしで' GROUP BY'を使うこともできます。 –

+0

合意。それを逃してはならない:( –

1

あなたはグループによってあなたの行をrankしてからのみ、トップ3を取ることができる:

SELECT [id], [group] 
FROM (SELECT [id], [group], RANK() OVER (ORDER BY [group] ASC) rk 
     FROM mytable) t 
WHERE rk <= 3 
0

@Tim :あなたの質問を変更しました。

SELECT t1.id, t1.group 
FROM yourTable t1 
INNER JOIN 
(
    SELECT TOP N group 
    FROM yourTable 
    GROUP BY group 
    --ORDER BY group USE IT IF YOU WANT 
) t2 
    ON t1.group = t2.group 
関連する問題