Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    décembre 2007
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 51
    Points : 11
    Points
    11

    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 :
    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 :
    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 :
    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é Sénior
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 079
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 079
    Points : 5 085
    Points
    5 085

    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
    Candidat au titre de Membre du Club
    Inscrit en
    décembre 2007
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 51
    Points : 11
    Points
    11

    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 :
    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 habitué
    Homme Profil pro Julien Guiffroy
    Ingénieur d'étude Mainframe
    Inscrit en
    septembre 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Nom : Homme Julien Guiffroy
    Âge : 28
    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 : 114
    Points
    114

    Par défaut

    Sinon tu peux écrire :

    Code :
    1
    2
    3
     
    WITH view_name AS
    SELECT COUNT(*) AS nb_enreg FROM table(s) WHERE [conditions];
    et le combiner à

    Code :
    SELECT * FROM view_name where nb_enreg > 0

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •