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 :

Requête avec condition


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 60
    Points : 41
    Points
    41
    Par défaut Requête avec condition
    Bonjour,

    grâce à l'aide trouvée sur ce forum, je progresse pas à pas !
    Dans un précédent sujet, vous m'avez permis d'avancer su un sujet trop complexe pour moi (cf. http://www.developpez.net/forums/d12...sieurs-tables/).

    Je me permets de le rappeler ici. Je dispose de 4 tables,
    1 principale dans laquelle quasiment toutes mes informations sont contenues : CAMPLABO,
    3 secondaires liées par P_IDCAMPLABO dans laquelle je veux aller chercher d'autres informations : CAMPLABOBALLE, CAMPLABOCORDAGE, CAMPLABORAQ
    1 table PROJET lié à ma principale par un identifiant.

    La requête construite grâce à l'aide de ce forum est la suivante
    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
    SELECT DISTINCT 
            cmp.P_IDCAMPLABO
        ,   cmp.NOM
        ,   cmpprojet.CODE
        ,   cmp.ETAT
        ,   cmp.DTDEMANDE
        ,   cmp.DTSOUHAIT
        ,   cmp.DTCLOTURE
        ,   COALESCE(cmpballe.CDSPORT, cmpraq.CDSPORT, cmpcord.CDSPORT) AS CDSPORT
    FROM    CAMPLABO cmp
        LEFT JOIN
            CAMPLABOBALLE cmpballe 
            ON  cmpballe.P_IDCAMPLABO = cmp.P_IDCAMPLABO
        LEFT JOIN
            CAMPLABORAQ cmpraq 
            ON  cmpraq.P_IDCAMPLABO = cmp.P_IDCAMPLABO
        LEFT JOIN
            CAMPLABOCORDAGE cmpcord
            ON  cmpcord.P_IDCAMPLABO = cmp.P_IDCAMPLABO
        LEFT JOIN
            PROJET cmpprojet
            ON  cmpprojet.P_IDPROJET = cmp.F_IDPROJET
    ORDER BY cmp.P_IDCAMPLABO DESC
    Je voudrais pouvoir également retourner une valeur texte qui dépendrait des valeurs de P_IDCAMPLABO...
    Si cmpballe.P_IDCAMPLABO<>"", je voudrais retourner "BALLE",
    Si cmpcord.P_IDCAMPLABO<>"", je voudrais retourner "CORDAGE",
    Si cmpraq.P_IDCAMPLABO<>"", je voudrais retourner "RAQUETTE",
    sachant que seul l'un des trois est non nul...

    Merci encore pour votre aide
    Sylvain

  2. #2
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Citation Envoyé par SlySylvain Voir le message
    Je voudrais pouvoir également retourner une valeur texte qui dépendrait des valeurs de P_IDCAMPLABO...
    Si cmpballe.P_IDCAMPLABO<>"", je voudrais retourner "BALLE",
    Si cmpcord.P_IDCAMPLABO<>"", je voudrais retourner "CORDAGE",
    Si cmpraq.P_IDCAMPLABO<>"", je voudrais retourner "RAQUETTE",
    sachant que seul l'un des trois est non nul...

    Merci encore pour votre aide
    Sylvain
    Il faut utiliser la syntaxe CASE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CASE WHEN cmpballe.P_IDCAMPLABO IS NOT NULL THEN 'Balle'
    WHEN ...
    END AS Var
    FROM MaTable

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 60
    Points : 41
    Points
    41
    Par défaut
    Bonjour Laure,

    Merci pour ta réponse. Après quelques ratés, je viens de réussir à l'intégrer dans ma requête initiale !

    Au cas où cela puisse dépanner de futurs néophytes, voici le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select distinct cmp.P_IDCAMPLABO,cmp.NOM, COALESCE(cmpballe.CDSPORT, cmpraq.CDSPORT, cmpcord.CDSPORT) AS CDSPORT, case WHEN cmpballe.P_IDCAMPLABO IS NOT NULL THEN 'Balle'
    WHEN cmpraq.P_IDCAMPLABO IS NOT NULL THEN 'Raquette'
    WHEN cmpcord.P_IDCAMPLABO IS NOT NULL THEN 'Cordage'
    end as Produit,
    cmpprojet.LIBELLE,cmp.ETAT, cmp.DTDEMANDE, cmp.DTSOUHAIT, cmp.DTCLOTURE
    from CAMPLABO cmp
    left join CAMPLABOBALLE cmpballe on cmpballe.P_IDCAMPLABO=cmp.P_IDCAMPLABO
    left join CAMPLABORAQ cmpraq on cmpraq.P_IDCAMPLABO=cmp.P_IDCAMPLABO
    left join CAMPLABOCORDAGE cmpcord on cmpcord.P_IDCAMPLABO=cmp.P_IDCAMPLABO
    left join PROJET cmpprojet on cmpprojet.P_IDPROJET=cmp.F_IDPROJET
    order by cmp.P_IDCAMPLABO desc
    Bonne continuation,
    Sylvain

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

Discussions similaires

  1. [MySQL] Requête avec condition sur un champ
    Par nonhosonno dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/02/2007, 14h00
  2. [MySQL] pb de requête avec conditions, débutant
    Par carelha dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 30/11/2006, 19h35
  3. Requête avec condition
    Par lolo_bob2 dans le forum Access
    Réponses: 1
    Dernier message: 08/06/2006, 19h59
  4. [Requête]Requête avec condition
    Par Miles Raymond dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 23/05/2006, 08h30
  5. Calcul requête avec conditions multiples
    Par Phullbrick dans le forum Access
    Réponses: 7
    Dernier message: 18/04/2006, 13h45

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