2

我有一个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

那么,我该如何继续呢?任何帮助表示赞赏。

4

2 回答 2

4

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

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

您说您希望返回 ID 为 43、71 的书籍,因为它们是前 2 个书籍 ID,但表中的数据并不是天生有序的。除非您有另一列可以按该顺序获取行,否则如果您按 bookid 升序排序,则您将返回 43、64。

于 2013-04-04T21:43:56.750 回答
0

下面的查询呢:

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

它对我来说很好用

于 2013-04-04T21:58:48.330 回答