Combinaison de select

pagnah Messages postés 19 Statut Membre -  
Heremion Messages postés 564 Statut Membre -
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. DROE Messages postés 148 Date d'inscription   Statut Membre Dernière intervention   48
     
    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
  2. pagnah Messages postés 19 Statut Membre
     
    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
  3. blux Messages postés 2048 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    c'est quel SQL ? car tu as peut-être des prédicats de comparaison utilisables dans un SELECT.
    0
  4. Utilisateur anonyme
     
    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. blux Messages postés 2048 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Heremion Messages postés 564 Statut Membre 102
     
    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