11
votes

Impossible d'utiliser des alias dans Row_Number () sur SQL Server?

Je dois créer une colonne Row_Number commandée par une somme groupée, lors de l'utilisation de SQL:

select Sales.Name, SUM(Sales.Bill) as billsum, ROW_NUMBER() over (order by SUM(Sales.Bill) DESC) as rn
from Sales group by Sales.Name


1 commentaires

Seulement en définissant l'alias dans une autre partie de la requête telle qu'un CTE ou appliquer une pièce . Celko explique pourquoi ici


4 Réponses :


10
votes

Le Documents MSDN pour la clause T-SQL sur Dites:

valuelle_expression ne peut pas se référer aux expressions ou alias dans la liste Sélectionner.


0 commentaires

1
votes

Des travaux possibles sont d'utiliser CTE ou une sous-requête:

SELECT Name, billsum, ROW_NUMBER() OVER (ORDER BY billsum DESC) AS rn
FROM 
  ( SELECT Sales.Name, SUM(Sales.Bill) AS billsum 
    FROM Sales
    GROUP BY Sales.Name
  ) tmp


0 commentaires

2
votes

Comme déjà indiqué par un autre membre, vous devez soit utiliser CTE ou sous-requête.

Non seulement la fonction Row_Number (), mais dans TSQL, vous ne pouvez pas référencer l'alias dans la même requête, vous devez donc utiliser l'une des méthodes mentionnées ci-dessus ou l'expression que vous avez utilisée dans votre message. J'espère que ça a du sens!! :)


0 commentaires

-1
votes
-- Reorder after cutting out qty = 0.
SELECT  *,ROW_NUMBER()  OVER  (partition by claimno ORDER BY itemno) as 'alias name'
from  dbo.OrderCol
where QTY <> 0

1 commentaires

Ce n'est vraiment pas correct. Et la question a été répondue correctement il y a longtemps.