{MySQL} Nommer résultat d'une somme en "where

Résolu
Bonjour à tous,

Grâce à l'un d'entre vous, j'ai réussi à effectuer une requête qui à mes yeux était assez compliqué. Mais, un deuxième problème vient à mon encontre.

En effet, dans ma requete il y a la différence de 2 colonnes qui me donne un résultat final, comme suit :

SUM(IF(Sens = 'D', Dons, 0)) - SUM(IF(Sens = 'C', Dons, 0)) AS Solde

Le problème que je rencontre est de savoir comment utiliser "Solde" dans la clause "WHERE" car je veux que le solde soit >=0,01 ou <=-0,01.

A l'heure actuel, en utilisant Solde directement, ou la formule, SQL me dit que je fais une erreur de synthaxe.

Je viens donc vers vous pour avoir une solution.....

Merci d'avance
Configuration: Windows XP Internet Explorer 7.0

14 réponses

  1. Webmaster
    Bonjour,

    select IIII,CCCCCC,
    SUM(IF(Sens = 'D', Dons, 0)) AS SumD,
    SUM(IF(Sens = 'C', Dons, 0)) AS SumC,
    SUM(IF(Sens = 'D', Dons, 0)) - SUM(IF(Sens = 'C', Dons, 0)) AS Solde
    FROM Table_sql
    where CCCCCC>=470000 and CCCCCC<=479999
    GROUP BY IIII, CCCCCC
    HAVING Solde BETWEEN -0.01 AND 0.01;
    1
    1. peux tu mettre toute ta requête stp

      where solde >=0,01
      or solde <=-0,01

      ta essayé?
      0
      1. Salut à vous,

        Petite hypothèse, pardonnez moi si je me trompe, mais ne serait-ce pas un having plutôt qu'un where puisque tu utilise une fonction et non un nom de champ ?

        autrement dit écrire

        having solde >= 0,01
        or solde <= -0,01

        quelques notions de cours lointains, il me semble que l'on m'avait appris cela mais pas persuadé.
        et je passais par là..

        a+
        0
        1. be test les deux mdr ensuite dis nous lol
          0
          1. J'ai essayé where solde >=0,01 and solde<=0,01, mais ça ne fonctionne pas. Cela m'ecrit que je fais une erreur de syntaxe car il ne connait pas la colonne Solde.
            Ce qui me parait bizare car j'avais écris après as....

            J'ai pas d'autres pistes??
            0
            1. tu as essayé ce que j'ai dit ? lol

              having à la place de where
              0
              1. solde c'est le nom de ta colonne(j'ai jamais eu besoin de faire ca donc ??) ta pas un champs à qui tu pourrais mettre la condition de 0.01 etc...?

                et pi le or??? lol
                0
                1. un vrai dialogue de sourd je trouve ^^'
                  0
                  1. J'ai essayé avec having et avec where mais ça ne marche ni l'un ni l'autre.

                    En fait ma requete entière est la suivante :

                    select IIII,CCCCCC,
                    SUM(IF(Sens = 'D', Dons, 0)) AS SumD,
                    SUM(IF(Sens = 'C', Dons, 0)) AS SumC,
                    SUM(IF(Sens = 'D', Dons, 0)) - SUM(IF(Sens = 'C', Dons, 0)) AS Solde
                    FROM Table_sql
                    where CCCCCC>=470000 and CCCCCC<=479999
                    GROUP BY IIII, CCCCCC;

                    Et je voudrais supprimer des données qui me sont reportées, toutes celles où le montant dans la colonne Solde est comprise entre -0.01 et 0.01

                    Avez vous une idée??
                    0
                    1. J'avou necro27 que j'ai eu un peu de mal à m'exprimer....lol
                      Maintenant j'espère avec la requete actuel que je vous ait montré, ça va marcher...

                      Merci d'avance
                      0
                      1. Le programme te renvoi quoi comme erreur, et à quelle ligne ?
                        0
                        1. La proposition de Dam75 est quasiment bonne mais c'est l'inverse que je cherche, c'est à dire les propositions autres que comprise entre -0.01 et 0.01. Comment dois-je faire pour inverser le having?

                          Donc encore Merci à Dam75 et également à Necro27 et Kentin76250 car sans vous je n'y serais pas arrivé.

                          Merci d'avance pour la dernière petite question...
                          0
                          1. C'est bon j'ai trouvé avec not between

                            Encore merci à vous
                            0
                            1. not between oui pourquoi pas mdr j'y avait meme pas pensé
                              0