应用distinct之后使用Row_number

时间:2012-04-26 05:36:08

标签: sql sql-server tsql stored-procedures paging

我正在创建一个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应用这就是我获取重复值的原因,如何先得到不同的行,然后获取相同的行号。

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

1 个答案:

答案 0 :(得分:1)

您是否需要在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