2010-09-02 70 views
1

我retreiving從數據庫中的所有用戶對每個用戶DESC排序在CTE表達

with TH_Users as 
(
    SELECT [ID] 
     ,[FullName] 
     ,[UserName] 
     ,[ImageName] 
     ,dbo.GetUserFollowers(ID) AS Followers 
, ROW_NUMBER() OVER (order by ID) AS 'RowNumber' 
from dbo.TH_Users 
Where CultureID = @cultureID 

) 
Select ID,[FullName] 
     ,[UserName] 
     ,[ImageName], Followers from TH_Users 
Where RowNumber BETWEEN @startIdx AND @endIdx 
Order BY Followers DESC 

下令追隨者的數量我使用一個函數來獲取追隨者爲每個用戶的數量。現在是我的用戶關注者列作爲ROW_NUMBER()的列順序(由追隨者訂購)AS'RowNumber'

我收到編譯錯誤。

在訂單結束時放置訂單BY追隨者DESC不會給出預期的結果。

有什麼建議嗎?

感謝

回答

0

當您使用AS給一個別名爲列,該別名不適查詢 - 在邏輯上,應用別名列(幾乎)評估查詢的最後一部分。

所以,如果你希望你的ROW_NUMBER與CTE爲OVER你的別名爲Followers,必須在相同的條款列本身表達出來:

;with TH_Users as 
(
    SELECT [ID] 
     ,[FullName] 
     ,[UserName] 
     ,[ImageName] 
     ,dbo.GetUserFollowers(ID) AS Followers 
, ROW_NUMBER() OVER (order by dbo.GetUserFollowers(ID)) AS 'RowNumber' 
from dbo.TH_Users 
Where CultureID = @cultureID 
) 

注意,這將原因該功能要被評估的次數比現在多。

(我還沒有測試過)