1

我正在创建一个 SP,它通过在其上应用 distinct 来给出一些结果,现在我想实现服务器端分页,所以我尝试在不同的结果上使用 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 然后应用 distinct ,这就是为什么我得到重复值,如何首先获得不同的行然后获得相同的行号。

对此有任何解决方案吗?我错过了什么吗?需要尽快答复。提前致谢!

4

1 回答 1

1

您不需要在 ROW_NUMBER 语句中添加“分区依据”吗?

ROW_NUMBER() OVER(Partition by ___, ___, ORDER BY tblA.TeamName DESC) 

在空白处,放置要为其创建新行号的列名。Duplicates 将收到一个非 1 的数字,因此您可能不需要 distinct。

要收集唯一值,您可以编写一个子查询,其中存储过程仅获取其中包含 1 的行。

select * from
(
  your code
) where row = 1

希望有帮助。

我不确定你为什么要这样做:

WHERE CTE.Row BETWEEN @StartRowIndex AND @StartRowIndex+@NumRows-1 
于 2012-05-10T19:06:28.730 回答