L'utilisation d'un classement SQL Fonction avec une colonne dérivée
-
21-09-2019 - |
Question
Je suis en train d'utiliser un classement SQL Server 2008 Fonction sur une requête triée par une colonne dérivée. Voici un exemple
SELECT
table.FirstName, table.LastName,
CalculatedValue(table.number) As Points,
ROW_NUMBER() OVER (ORDER BY points) AS 'Row Number'
FROM table
ORDER BY points
Je reçois toujours une erreur nom de colonne non valide « points » parce que la fonction OVER ne fonctionne pas avec des alias, en fonction de ce que je l'ai lu.
Quelqu'un sait-il une alternative où je peux récupérer le numéro de ligne séquentielle d'un jeu de résultats triés par une colonne dérivée?
La solution
Que diriez-vous à l'aide d'une table dérivée (sous-requête)? Je pense que quelque chose comme ce qui suit devrait travailler
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
Autres conseils
Utilisez un CTE pour calculer vos points, rang puis sur le 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow