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 :

case when multiple


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Par défaut case when multiple
    Bonjour,

    Je suis bloqué sur une requete que j'arrive pas à optimiser ou la faire autrement.
    Je voulais savoir si je peux afficher plusieurs colonnes à la suite d'un then :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CASE
    WHEN CONDITION THEN SELECT VAL1... AS
                        SELECT VAL2... AS
    ELSE SELECT VAL3 ... AS
    END

    Voici ma requete, (Je teste toujours la meme condition au départ )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     (SELECT CODE FROM VOL WHERE DEPART = 1)
    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
     
     
    ,CASE   
      When (SELECT CODE FROM VOL WHERE DEPART = 1)='NCE' then 
    	TRIM(SELECT VALISE_DSC FROM VOL WHERE DEPART = 1) 
      else TRIM(SELECT VALISE_MNT FROM VOL WHERE DEPART = 1) end as ESCALE
    	,CASE   
      When (SELECT CODE FROM VOL WHERE  DEPART = 1)='NCE' then 
    	TRIM(SELECT POIDS_DSC FROM VOL WHERE DEPART = 1) 
      else TRIM(SELECT POIDS_MNT FROM VOL WHERE DEPART = 1) end as POIDS
      	,CASE      
      When (SELECT CODE FROM VOL WHERE DEPART = 1)='NCE' then 
    	TRIM((SELECT VALISE_DSC FROM VOL WHERE DEPART = 2) 
      else TRIM(SELECT VALISE_MNT FROM VOL WHERE DEPART = 2) end as ESCALE1
      	,CASE      
      When (SELECT CODE FROM VOL WHERE  DEPART = 1)='NCE' then 
    	TRIM(SELECT POIDS_DSC FROM VOL WHERE DEPART = 2) 
      else TRIM(SELECT POIDS_MNT FROM VOL WHERE DEPART = 2) end as POIDS1
    ... j'en ai dix comme ça

    Par avance Merci pour votre aide

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 135
    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 135
    Par défaut
    Même si la structure de cette portion de requête me laisse supposer un problème de conception, il faut ramener ces sous-requêtes dans la clause FROM.
    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
     
    SELECT  ...
        ,   CASE    vl1.code WHEN 'NCE' 
                THEN  TRIM(vl1.valise_dsc) 
                ELSE  TRIM(vl1.valise_mnt) 
            END AS  escale
        ,   CASE    vl1.code WHEN 'NCE' 
                THEN  TRIM(vl1.poids_dsc) 
                ELSE  TRIM(vl1.poids_mnt) 
            END AS  poids
        ,   CASE    vl1.code WHEN 'NCE' 
                THEN  TRIM(vl2.valise_dsc) 
                ELSE  TRIM(vl2.valise_mnt) 
            END AS  escale1
        ,   CASE    vl1.code WHEN 'NCE' 
                THEN  TRIM(vl2.poids_dsc) 
                ELSE  TRIM(vl2.poids_mnt) 
            END AS  poids1
        ,   ...  
    FROM    ...
        CROSS JOIN
            vol vl1
        CROSS JOIN
            vol vl2
    WHERE   vl1.depart  = 1
        AND vl2.depart  = 2
        ...
    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.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Par défaut
    Merci Al1_24 d'avoir pri le temps de me répondre
    Votre réponse m'a aidé à avancer dans mon extraction mais j'ai une autre question si vous auriez la gentillesse et le "temps" de me donner une idée comment je pourrai factoriser aussi cette requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ,CASE   
      When (SELECT CODE FROM VOL WHERE DEPART = 1)='NCE' then 
        TRIM(SELECT VALISE_DSC FROM VOL WHERE DEPART = 1) 
     when (SELECT VALISE_MNT  FROM VOL WHERE DEPART = (SELECT (MAX(DEPART) FROM VOL)) = 'NCE' then 
    TRIM(SELECT VALISE_MNT FROM VOL WHERE DEPART = 1) 
    end as ESCALE
          ....
    Par avance Merci

Discussions similaires

  1. case when multiple
    Par samgratt dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/11/2009, 15h33
  2. case/when avec plusieurs valeurs pour le then
    Par Neo41 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2005, 15h58
  3. Pb avec case when !
    Par Brice Yao dans le forum Langage SQL
    Réponses: 11
    Dernier message: 05/08/2005, 08h20
  4. Structure CASE WHEN en Interbase
    Par tchaman dans le forum InterBase
    Réponses: 8
    Dernier message: 13/12/2004, 16h18
  5. [SQL] performances Decode ou Case when ?
    Par Yorglaa dans le forum Oracle
    Réponses: 8
    Dernier message: 01/10/2004, 15h50

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