IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Condition sur un select


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 57
    Par défaut Condition sur un select
    Bonjour,

    j'ai une requête complexe où je récupère par exemple 4 champs....TOTO_ID, TOTO1, TOTO2, et DATE.

    Imaginons que ma requête sorte 2 enregistrements ayant les mêmes valeurs SAUF que dans l'enregistrement 1 il y ait une valeur dans Date et dans l'enregistrement 2 il n'y ait rien du tout (null) (voir exemple)

    EX:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TOTO_ID     TOTO1      TOTO2        DATE
    12            bonjour   salut         
    13            hello       hi             31/10/2007
    13            hello       hi
    14            cheers    yerc'h mat   
    15            prost      slangiva
    Comment devrais-je procéder pour que parmis tous mes enregistrements si 2 enregistrements ne diffère que par le contenu de DATE (non null ou null), je ne sorte finalement que l'enregistrement ayant une valeur dans DATE

    je vous remercie par avance

    ps: je travaille sous oracle

  2. #2
    Membre émérite Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 57
    Par défaut
    non car si je met ça il me prendra uniquement les enregistrements qui possèdent une valeur dans DATE

    or moi, je veux récupérer tout mais SI deux enregistrements ayant pour seule différence la présence ou non d'une valeur dans DATE,
    je veux qu'au final il me sorte l'enregistrement qui possède une valeur dans date

    et que par conséquent il me zappe l'enregistrement ayant DATE à null

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Si ta version d'Oracle le prend en charge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    WITH    maliste
        (   toto_id
        ,   toto1
        ,   toto2
        ,   madate
        )
    AS  (   SELECT  *
            FROM    marequete
        )
    SELECT  toto_id
        ,   toto1
        ,   toto2
        ,   madate
    FROM    maliste
    WHERE   madate IS NOT NULL
    UNION
    SELECT  toto_id
        ,   toto1
        ,   toto2
        ,   madate
    FROM    maliste AS nod
    WHERE   madate IS NULL
        AND NOT EXISTS
            (   SELECT  1
                FROM    maliste AS dat
                WHERE   nod.toto_id = dat.toto_id
                    AND nod.toto1   = dat.toto1
                    AND nod.toto2   = dat.toto2
                    AND madate  IS NOT NULL
            )
    ;
    Tu peux aussi faire la même chose avec une vue sur ta requête...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    en SQL standard,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT DISTINCT a.toto_id,a.toto1,a.toto2 , b.ladate 
    FROM 
      marequete a  
          INNER JOIN 
      marequete b
    ON (a.toto_id=b.toto_id and a.toto1=b.toto1 and a.toto2=b.toto2)
    GROUP BY 
       a.toto_id,a.toto1,a.toto2,b.ladate
    HAVING 
       (COUNT(1)>1  AND COALESCE(ladate,'') <>'' or COUNT(1)=1)
    Attention a ne pas utiliser des noms reservés (DATE en l'occurrence).

    Bon courage

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Select, avec conditions sur 4 champs simultanément
    Par byrdo dans le forum Langage SQL
    Réponses: 10
    Dernier message: 22/09/2009, 18h13
  2. jointure de table a double condition sur un select
    Par igorzup dans le forum Langage SQL
    Réponses: 15
    Dernier message: 05/12/2008, 18h41
  3. Réponses: 6
    Dernier message: 09/09/2008, 16h42
  4. Réponses: 0
    Dernier message: 05/02/2008, 10h09
  5. Réponses: 3
    Dernier message: 03/05/2007, 11h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo