Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Microsoft SQL server选择前N个组_Sql_Sql Server_Sql Server 2008_Select - Fatal编程技术网

Microsoft SQL server选择前N个组

Microsoft SQL server选择前N个组,sql,sql-server,sql-server-2008,select,Sql,Sql Server,Sql Server 2008,Select,关于如何从每组中选择n行,有很多答案。 但我要找的是从top N group中选择每一行,例如,我有以下数据: 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实

关于如何从每组中选择n行,有很多答案。 但我要找的是从top N group中选择每一行,例如,我有以下数据:

 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实现这一点?

一个选项是使用子查询选择前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
您可以按组选择行,然后只选择前三名:

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

@蒂姆:我刚刚修改了你的查询

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

是否应该用“组”替换“按订单”BY@TheShooter我使用DISTINCT查找前N个组。另一种方法是使用GROUP BY,而不使用DISTINCT.Agreed。不应该错过:谢谢@TimBiegeleisen的指导:注意:不要使用组。