2009-09-02 16 views
0

Я пытаюсь использовать функцию ранжирования SQL Server 2008 в запросе, отсортированном по производному столбцу. Вот примерИспользование функции ранжирования SQL с производным столбцом

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 не работает с псевдонимами, на основании того, что я прочитал.

Кто-нибудь знает альтернативу, где я могу получить последовательный номер строки результирующего набора, отсортированный по производному столбцу?

ответ

3

Как насчет использования производной таблицы (подзапроса)? Я думаю, что что-то вроде следующего должно работать

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 
+0

В наборе результатов не будут указаны все столбцы, которые запросит OP. И ORDER BY на производной таблице не повлияет. Производные таблицы возвращают отношения, неупорядоченный набор (сумка) строк. –

+0

Я понял, что пропустил другие колонки - теперь включен :) –

+0

Это сработало очень хорошо. Спасибо за помощь. – wrburgess

2

Используйте 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 
+0

Я знаю, что это сработает, но я использовал другой ответ. Спасибо за помощь! – wrburgess

Смежные вопросы