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?

Était-ce utile?

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
scroll top