Usando uma função de classificação SQL com uma coluna derivada
-
21-09-2019 - |
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?
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