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

DB2 Discussion :

SQL select case when


Sujet :

DB2

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 52
    Points : 35
    Points
    35
    Par défaut SQL select case when
    Bonjour à tous,

    Après avoir parcouru les documentations et le forum, je suis tombée sur plusieurs éventuelles solutions à mon problème mais je n'arrive pas au bon résultat.

    En gros, j’ai besoin de faire un WHERE 'que' s’il y a une valeur dedans.. Or, je pense que ce n’est pas possible

    Ma requête de base:

    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 DISTINCT goo.gco_good_id,
    --si c’est en français on affiche:
                 'Type : '
              || NVL (dic66.dic_description, '')
              || CHR (13)
              || 'Ø Métrique : '
              || TO_CHAR (NVL (att.gat_float_18, 0), '9990.99')
              || ' mm / Pas : '
              || TO_CHAR (NVL (att.gat_float_64, 0), '9990.99'),
    --si c’est en anglais on affiche:
                 'Type : '
              || NVL (dico.dit_descr, '')          -- affiche la traduction en anglais
              || CHR (13)
              || 'Metric Ø : '
              || TO_CHAR (NVL (att.gat_float_18, 0), '9990.99')
              || ' mm / Fitch : '
              || TO_CHAR (NVL (att.gat_float_64, 0), '9990.99')
         FROM gco_good goo
         left join (gco_good_attribute att
         left join (dic_gco_attribute_free_66 dic66 left join  dico_description dico on  dic66.dic_gco_attribute_free_66_id = dico.dit_code)
         on att.dic_gco_attribute_free_66_id = dic66.dic_gco_attribute_free_66_id )
         on goo.gco_good_id = att.gco_good_id
         where
         goo.goo_major_reference LIKE 'ECR%'
         and dico.pc_lang_id = 3
        AND dico.dit_table = 'DIC_GCO_ATTRIBUTE_FREE_66'
    mon problème est que ce select ne m'affiche que les articles qui ont un Type. ceux qui ne sont pas reinseigné ne s'affichent pas..
    et ceci à cause de mon where.

    J'ai essayé avec les variantes "case when"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    where
     dico.dit_table = case when dico.dit_table ='DIC_GCO_ATTRIBUTE_FREE_66'   then 'DIC_GCO_ATTRIBUTE_FREE_66'  else null  end
    ...
    J'ai aussi essayé de creuser du coté du select mais évidement ça joue pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select
      'Type : '
              || NVL ( (case when dico.pc_lang_id = 3 then dico.dit_descr else 'false'  end ) , '')
    from
    ...
    Je travaille sur une BD Oracle et j'utilise le TOAD si jamais.

    Merci d'avance pour votre aide et pour votre temps.

    Cristina!

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    remontez vos conditions qui portent sur des tables en jointure externe dans la clause ON.

    Sinon vous réalisez une jointure interne.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 52
    Points : 35
    Points
    35
    Par défaut merci!
    Ah oui!

    Tellement bien!

    Comment j'ai pas pensé avant!?



    Merci bcp bcp bcp!

    Pour ceux qui aimeraient voir le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    FROM gco_good goo
         left join (gco_good_attribute att
         left join (dic_gco_attribute_free_66 dic66 left join  dico_description dico on  dic66.dic_gco_attribute_free_66_id = dico.dit_code and  dico.pc_lang_id = 3 and dico.dit_table ='DIC_GCO_ATTRIBUTE_FREE_66' )
         on att.dic_gco_attribute_free_66_id = dic66.dic_gco_attribute_free_66_id )
         on goo.gco_good_id = att.gco_good_id 
         where
         goo.goo_major_reference LIKE 'ECR%'

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur d'étude Mainframe
    Inscrit en
    Septembre 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur d'étude Mainframe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 61
    Points : 124
    Points
    124
    Par défaut
    Sinon tu peux écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WITH view_name AS
    SELECT COUNT(*) AS nb_enreg FROM table(s) WHERE [conditions];
    et le combiner à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM view_name where nb_enreg > 0

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

Discussions similaires

  1. pb SELECT CASE WHEN
    Par bb5477 dans le forum SQL
    Réponses: 2
    Dernier message: 18/12/2007, 17h16
  2. Access et SELECT CASE WHEN dans requetes
    Par Orion01 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 06/12/2007, 11h24
  3. Réponses: 7
    Dernier message: 29/05/2007, 10h21
  4. Equivalent "Select Case when then else end" sur Paradoxe
    Par Seuh.m dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/06/2006, 08h23

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