L'utilisation d'une colonne calculée dans une clause where
Je suis en train d'utiliser une colonne calculée dans une clause where.
J'ai essayer tout de CROSS s'APPLIQUER à des sous-requête select, mais il ne me donne pas du tout près de ce dont j'ai besoin.
Ma requête jusqu'à présent:
SELECT p.Code, c.AccountNumber, Sales = (SUM(p.UnitPrice) * SUM(od.QtyShipped)) FROM [dbo].Customer c
LEFT JOIN [dbo].OrderHeader oh ON oh.CustomerId = c.Id
LEFT JOIN [dbo].OrderDetail od ON od.OrderHeaderId = oh.Id
LEFT JOIN [dbo].Product p ON p.Id = od.ProductId
WHERE Sales > 100
GROUP BY p.Code, c.AccountNumber, Sales
Cela ne fonctionne pas, comme "Ventes" est une colonne non valide
Pouvez-vous utiliser
HAVING (SUM(p.UnitPrice) * SUM(od.QtyShipped)) > 100
au lieu de la WHERE
? (voir w3schools.com/sql/sql_having.asp)OriginalL'auteur JadedEric | 2014-12-16
Vous devez vous connecter pour publier un commentaire.
Vous aurez besoin d'envelopper l'intérieur de la requête dans une table dérivée ou CTE, afin d'être en mesure d'utiliser des colonnes dérivées dans le
WHERE
de l'alinéa (notez ÉgalementSUM()
est spécifié qu'une seule fois, après la multiplication):Les Ventes de calcul devrait être juste ceci :
SUM(p.UnitPrice * od.QtyShipped)
je vois ce que vous avez fait, je vous remercie. et donc, je suis en train d'apprendre :). je vous remercie.
OriginalL'auteur StuartLC
Vous pouvez utiliser l'expression de table commune pour cette
OriginalL'auteur mindbdev
Si c'est une colonne calculée, vous pouvez utiliser l ' "AVOIR".
ORDER BY
, mais pas dans unHAVING
- vous devrez répéter le plein calc dans le DEVOIR (comme @Jonny commentaire), ou enveloppez la colonne calculée. Démo IciMalheureusement, cette réponse est fausse. pas de travail.
OriginalL'auteur Muran