Использование функции ранжирования SQL с производным столбцом
-
21-09-2019 - |
Вопрос
Я пытаюсь использовать функцию ранжирования SQL Server 2008 для запроса, отсортированного по производному столбцу.Вот пример
SELECT
table.FirstName, table.LastName,
CalculatedValue(table.number) As Points,
ROW_NUMBER() OVER (ORDER BY points) AS 'Row Number'
FROM table
ORDER BY points
Я всегда получаю ошибку неверное имя столбца «пункты» потому что функция OVER не работает с псевдонимами, судя по тому, что я читал.
Кто-нибудь знает альтернативу, где я могу получить последовательный номер строки набора результатов, отсортированного по производному столбцу?
Решение
Как насчет использования производной таблицы (подзапроса)?Я думаю, что-то вроде следующего должно работать
SELECT
ROW_NUMBER() OVER (ORDER BY sub.Points) AS 'Row Number',
sub.FirstName,
sub.LastName,
sub.Points
FROM
(
SELECT
table.FirstName,
table.LastName,
CalculatedValue(table.number) As Points
FROM
table
) sub
ORDER BY
sub.Points
Другие советы
Используйте CTE для подсчета своих очков, а затем оценивайте их по CTE.
WITH tableWithPoints AS (
SELECT
table.FirstName, table.LastName,
CalculatedValue(table.number) As Points
FROM table)
SELECT FirstName, LastName, Points,
ROW_NUMBER() OVER (ORDER BY Points) AS 'Row Number'
FROM
tableWithPoints ORDER BY Points
Не связан с StackOverflow