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. 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
    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. Modérateur
        Salut,

        c'est quel SQL ? car tu as peut-être des prédicats de comparaison utilisables dans un SELECT.
        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. 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