Bonjour
dans la requete suivante je ne trouve pas la bonne syntaxe pour que l'alias de
Sum(paiement.MONTANT), TOTALPAYE soit utilisé dans where sans génerer:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'TOTALPAYE' in 'where clause''....
Quelq'un voit il la solution?
A't'on le droit d'utiliser un alias de fontion dans Where?
Merci
SELECT
reservat.N_RESA,
reservat.numfacture,
paiement.N_RESA,
clients.NOM,
clients.PRENOM,
reservat.datefre,
reservat.ttcfacture,
Sum(paiement.MONTANT) AS TOTALPAYE,
reservat.DATELIMITEpaiement
FROM
reservat
Left Join paiement ON reservat.N_RESA = paiement.N_RESA
Inner Join clients ON reservat.REF_CLIENT = clients.R_F__PERSO
Inner Join croisier ON reservat.N_CROISIE = croisier.N_CROISIE
WHERE
reservat.numfacture > 0 AND
reservat.DATELIMITEpaiement < CURDATE() AND
reservat.ttcfacture > TOTALPAYE
GROUP BY
reservat.N_RESA,
paiement.N_RESA,
reservat.numfacture,
clients.NOM,
clients.PRENOM,
reservat.datefre,
reservat.ttcfacture
Lorsque tu utilises une fonction d'agrégat et que tu veux effectuer un tri sur cette fonction d'agrégat, tu dois utiliser HAVING. Tu ne peux pas utiliser directement une colonne créée dynamiquement dans le WHERE (le WHERE trie les lignes avant leur sélection tandis que HAVING le fait après).
Ta requête ressemblera donc à ceci, normalement :
SELECT
reservat.N_RESA,
reservat.numfacture,
paiement.N_RESA,
clients.NOM,
clients.PRENOM,
reservat.datefre,
reservat.ttcfacture,
Sum(paiement.MONTANT) AS TOTALPAYE,
reservat.DATELIMITEpaiement
FROM
reservat
Left Join paiement ON reservat.N_RESA = paiement.N_RESA
Inner Join clients ON reservat.REF_CLIENT = clients.R_F__PERSO
Inner Join croisier ON reservat.N_CROISIE = croisier.N_CROISIE
WHERE
reservat.numfacture > 0 AND
reservat.DATELIMITEpaiement < CURDATE()
GROUP BY
reservat.N_RESA,
paiement.N_RESA,
reservat.numfacture,
clients.NOM,
clients.PRENOM,
reservat.datefre,
reservat.ttcfacture
HAVING SUM(paiement.MONTANT) > reservat.ttcfacture;
requete mysql:alias sum dans where
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.