获取前N个不同值的所有记录

时间:2013-04-04 21:37:41

标签: sql sql-server tsql sql-server-2008-r2

我有一个BookAuthor表,如下所示(SQL Server 2008 R2 Ent):

BookID  AuthorID
------  --------
43      676
43      76
43      354
71      89
71      76
99      71
64      50
64      39
64      354

我想获得前2个不同BookID的所有记录。因此,预期产出将如下:

    BookID  AuthorID
    ------  --------
    43      676
    43      76
    43      354
    71      89
    71      76

我尝试了以下最简单的查询,它只返回2行。

Select top 2 * from BookAuthor order by BookID ASC

那么,我该怎么办?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:4)

您可以使用以下内容获取TOP 2 DISTINCT BookIds:

select t1.bookid, t1.authorid
from BookAuthor t1
inner join
(
  select distinct top 2 bookid
  from BookAuthor
  order by bookid
) t2
  on t1.bookid = t2.bookid

请参阅SQL Fiddle with Demo

您声明您希望返回ID为43,71的图书,因为这些图书是前2名图书ID,但表格中的数据并非按字面排序。除非您有另一列,您可以按顺序获取行,如果您按bookid升序排序,那么您将返回43,44。

答案 1 :(得分:0)

下面的查询怎么样:

Select * from BookAuthor where BookID in(
select Distinct top 2 BookID from BookAuthor order by BookID asc)

它对我来说很好用