Сортировка по выражению CTE - PullRequest
1 голос
/ 03 сентября 2010

Я получаю всех пользователей из БД, упорядоченных по количеству подписчиков для каждого пользователя. DESC

 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 () OVER (порядок подписчиков) AS 'RowNumber'

Я получаю ошибку компиляции.

Установка Order BY Followers DESC в концезапроса не даст ожидаемого результата.

Есть предложения?

Спасибо

1 Ответ

0 голосов
/ 03 сентября 2010

Когда вы используете 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
)

Обратите внимание, что это не приведет к тому, что функция будет оцениваться больше, чем в настоящее время.

(я не проверял это)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...