我有一个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
那么,我该怎么办?任何帮助表示赞赏。
答案 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
您声明您希望返回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)
它对我来说很好用