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
4 Réponses :
Le Documents MSDN pour la clause T-SQL sur Dites: P>
valuelle_expression code> ne peut pas se référer aux expressions oualias forts> dans la liste Sélectionner. P> blockQuote>
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
Comme déjà indiqué par un autre membre, vous devez soit utiliser CTE ou sous-requête. P>
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!! :) p>
-- 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
Ce n'est vraiment pas correct. Et la question a été répondue correctement i> il y a longtemps.
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