Pergunta

Estou tentando usar uma função de classificação do SQL Server 2008 em uma consulta classificada por uma coluna derivada. Aqui está um exemplo

SELECT 
    table.FirstName, table.LastName, 
    CalculatedValue(table.number) As Points, 
    ROW_NUMBER() OVER (ORDER BY points) AS 'Row Number' 
FROM table 
ORDER BY points

Eu sempre recebo um erro Nome da coluna inválida "Pontos" Porque a função Over não funciona com aliases, com base no que li.

Alguém conhece uma alternativa em que eu posso recuperar o número da linha seqüencial de um conjunto de resultados classificados por uma coluna derivada?

Foi útil?

Solução

Que tal usar uma tabela derivada (subse QUERY)? Eu acho que algo como o seguinte deve funcionar

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

Outras dicas

Use um CTE para calcular seus pontos e depois classificar o 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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top