Partage
  • Partager sur Facebook
  • Partager sur Twitter

requete mysql:alias sum dans where

Sujet résolu
    3 décembre 2010 à 22:57:57

    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
    
    • Partager sur Facebook
    • Partager sur Twitter
      3 décembre 2010 à 23:15:28

      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;
      
      • Partager sur Facebook
      • Partager sur Twitter

      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.
      • Editeur
      • Markdown