Combinaison de select

Bonsoir,

je vais aller droit au but, j'ai une table 'correct' avec 3 champs :

NUM_DEBITE; MT_DEBITE; C_REST

je voudrais fusionner ces deux select à savoir :

SELECT MT_DEBITE from correct WHERE MT_DEBITE>=C_REST

SELECT C_REST from correct WHERE MT_DEBITE<=C_REST

et avoir un seul champ avec la fusion des résultat des deux champs, c'est à dire à chaque ligne lu, il fait la comparaison et donne selon les deux en fonction du select.
J'ai essayer avec union mais çà ne me donne pas le résultat que je voudrais, j'aimerais bien avoir un coup de main afin que je puisse avancer dans mon projet, merci bien à tous.

5 réponses

  1. Bonjour Pagnah,

    Pourquoi ne pas faire un truc du genre :

    SELECT  num_debite AS num,
                  mt_debite AS mt
    FROM     ta_table
    WHERE  mt_debite > c_rest
    
    UNION
    
    SELECT  num_debite AS num,
                  c_rest AS mt
    FROM    ta_table
    WHERE   mt_debite <= c_rest)
    
    0
    1. Bonjour

      Si c'est avec mySQL, tu as la fonction GREATEST :
      SELECT GREATEST(MT_DEBITE,C_REST) FROM correct


      Si tu n'as pas de fonction GREATEST, tu peux la simuler avec la valeur absolue et un tout petit peu d'arithmétique :
      SELECT (MT_DEBITE+C_REST + ABS(MT_DEBITE-C_REST))/2 FROM correct
      
      0
      1. Modérateur
        N'empêche que s'il met un >= et un <= dans les deux requêtes, ça va pas le faire...
        Sinon, en SQL access, il y a la fonction IIF(test,valeur1,valeur2)...
        0
    2. Modérateur
      Salut,

      c'est quel SQL ? car tu as peut-être des prédicats de comparaison utilisables dans un SELECT.
      0
      1. bonjour, voici un peu ce que je voudrais :

        NUM_DEBITE MT_DEBITE C_REST
        ---------- ---------- ----------
        1 100 101
        2 19 20
        3 200 150
        4 100 90
        5 8 19
        6 200 120

        et je voudrais avoir ceci comme résultat tel quel avec les doublons:

        Transaction
        -----------
        100
        20
        200
        100
        19
        200

        qd je fais
        SELECT MT_DEBITE AS "Transaction" FROM correct WHERE MT_DEBITE>=C_REST
        2 UNION
        3 SELECT C_REST AS "Transaction" FROM correct WHERE MT_DEBITE<=C_REST;

        les doublons sont supprimés et quand je fais avec UNION ALL les reusltat sont dupliqués, je ne sais pas si tu arriveras à comprendre avec tout mon charabia là, merci bien
        0
        1. Pagnah,

          Si un Union ne te conviens pas, montre moi un exmple de ce que tu désires en sortie à partir de cet exemple

          SQL> SELECT * FROM CORRECT;
          
          NUM_DEBITE  MT_DEBITE     C_REST
          ---------- ---------- ----------
                   1        100        101
                   2         20         19
                   3        200        150
          
          SQL>

          SQL> SELECT MT_DEBITE AS "Transaction" FROM scott.correct WHERE MT_DEBITE>=C_REST
            2  UNION
            3  SELECT C_REST AS "Transaction" FROM scott.correct WHERE MT_DEBITE<=C_REST;
          
          Transaction
          -----------
                   20
                  101
                  200
          
          SQL>


          DROE
          0