Précédent   Forum du club des développeurs et IT Pro > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 19/11/2012, 10h21   #1
roblescriso
Candidat au titre de Membre du Club
 
Inscription : décembre 2007
Messages : 51
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 51
Points : 10
Points : 10
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!
roblescriso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2012, 11h52   #2
punkoff
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 2 158
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 2 158
Points : 3 491
Points : 3 491
Bonjour,

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

Sinon vous réalisez une jointure interne.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2012, 12h03   #3
roblescriso
Candidat au titre de Membre du Club
 
Inscription : décembre 2007
Messages : 51
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 51
Points : 10
Points : 10
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%'
roblescriso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2012, 22h33   #4
Skylyn
Membre habitué
 
Homme Julien Guiffroy
Ingénieur d'étude Mainframe
Inscription : septembre 2012
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Julien Guiffroy
Âge : 27
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 : 113
Points : 113
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
Skylyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h14.


 
 
 
 
Partenaires

Hébergement Web