2012-04-26 38 views
0

我創建一個SP通過施加在它獨特的給出了一些成績後,現在我想實現服務器端分頁,所以我嘗試了不同的結果,使用ROW_NUMBER,如:使用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 @[email protected] 
     ORDER BY CTE.CountryName 

但行首先被分配RowNumber然後不同得到應用,這就是爲什麼我得到重複值,如何獲得不同的行,然後獲得行號相同。

對此有何解決方案?我錯過了什麼嗎? 需要儘快解答。 在此先感謝!

+2

的「DISTINCT」關鍵字不存在於您的查詢。你確定你正在使用DISTINCT嗎? – 2012-04-26 05:40:43

+0

嘿馬克,對不起,我忘了驗證,有一個業務邏輯查詢( - 表查詢開始於SELECT)tblA我在哪裏使用DISTINCT關鍵字。並且它在單獨執行時效果不錯 – MaxRecursion 2012-04-26 06:00:08

+0

我忘記了*澄清 – MaxRecursion 2012-04-26 06:01:12

回答

1

您是否需要將「partition by」添加到您的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 @[email protected]