我正在创建一个 SP,它通过在其上应用不同的结果来提供一些结果,现在我想实现服务器端分页,所以我尝试在不同的结果上使用 Row_number,例如:
WITH CTE AS
(
SELECT ROW_NUMBER() OVER(ORDER BY tblA.TeamName DESC)
as Row,tblA.TeamId,tblA.TeamName,tblA.CompId,tblA.CompName,tblA.Title,tblA.Thumbnail,tblA.Rank,tblA.CountryId,tblA.CountryName
FROM
(
--The table query starts with SELECT
)tblA
)
SELECT CTE.* FROM CTE
WHERE CTE.Row BETWEEN @StartRowIndex AND @StartRowIndex+@NumRows-1
ORDER BY CTE.CountryName
但是行首先被分配 RowNumber,然后应用不同的行,这就是为什么我得到重复的值,如何首先获取不同的行,然后获取相同的行号。
这个问题有什么解决办法吗?我错过了什么吗? 需要尽快答复。 预先感谢!
您不需要在 ROW_NUMBER 语句中添加“分区依据”吗?
ROW_NUMBER() OVER(Partition by ___, ___, ORDER BY tblA.TeamName DESC)
在空白处,放置您要为其创建新行号的列名称。重复项将收到一个非 1 的数字,因此您可能不需要不同的数字。
要收集唯一值,您可以编写一个子查询,其中存储过程仅获取其中包含 1 的行。
select * from
(
your code
) where row = 1
希望有帮助。
我不确定你为什么要这样做:
WHERE CTE.Row BETWEEN @StartRowIndex AND @StartRowIndex+@NumRows-1