Sql 应用distinct后使用行号

Sql 应用distinct后使用行号,sql,sql-server,tsql,stored-procedures,paging,Sql,Sql Server,Tsql,Stored Procedures,Paging,我正在创建一个SP,它通过对其应用distinct来提供一些结果,现在我想实现服务器端分页,所以我尝试在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,tb

我正在创建一个SP,它通过对其应用distinct来提供一些结果,现在我想实现服务器端分页,所以我尝试在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
但是行首先被分配了rownnumber,然后被应用了distinct,这就是为什么我得到了重复的值,如何首先得到distinct行,然后得到相同的行数

有什么解决办法吗?我错过什么了吗? 我需要尽快答复。 提前谢谢

您不需要将“partitionby”添加到您的ROW\u 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 
您不需要将“partitionby”添加到您的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 

查询中不存在“DISTINCT”关键字。你确定你使用的是DISTINCT吗?嘿,马克,对不起,我忘了验证,有一个业务逻辑查询(--表查询以SELECT开头)tblA,我在这里使用了DISTINCT关键字。当单独执行时,它工作得很好。尝试发布完整的查询,因为我现在什么都做不了。您能给出一个确切的示例,在输出中输出您想要的内容,以便清楚地理解和编码。您的查询中不存在“DISTINCT”关键字。你确定你使用的是DISTINCT吗?嘿,马克,对不起,我忘了验证,有一个业务逻辑查询(--表查询以SELECT开头)tblA,我在这里使用了DISTINCT关键字。当单独执行时,它工作得很好。试着发布完整的查询,因为我现在什么都做不了。你能给出一个确切的例子,在输出中输出你想要的内容,以便清楚地理解和编码吗。