解決Sql server分頁時第二頁以上查詢結果不正常的問題

有100個產品,其中最高價格的爲200元,而200元的產品共有40個,
如今好了,對每頁30進行分頁:
declare @PageSize int--30
declare @Page int
declare @LowerCount int
 
if @Page = 1
begin
    select top(@PageSize) from dbo.Product order by Price desc
end
else
begin
    set @LowerCount = (@Page-1)*@PageSize
    select * from dbo.Product
    where Price < (select min(Price) from (select top (@LowerCount) Price from dbo.Product order by Price desc AS tblTmp ))
    order by Price desc
end
 
如今好了,第1頁是正常的,第二頁,則丟失了10個200元的產品了!
 
因此,須要做以下改進:
if @Page = 1
begin
    select top(@PageSize) from dbo.Product order by Price desc
end
else
begin
    set @LowerCount = (@Page-1)*@PageSize
    select * from dbo.Product
    where Id not in (select top (@LowerCount) Id from dbo.Product order by Price desc,Id desc)
    order by Price desc,Id desc
end
 
注:dbo.Product.Id爲標識列(1,1)
 
小結:
第一個解法效率最高,但不適用於不具備惟一性的列,第二個解法效率低一點,但通用性最好。
相關文章
相關標籤/搜索