Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1040 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [ORACLE] Remplacement de valeurs "NULL"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ORACLE] Remplacement de valeurs "NULL"

n°2114200
KevinTran
Photographe
Posté le 01-12-2011 à 12:08:03  profilanswer
 

Salut :)
 
J'ai actuellement une base Oracle, un truc assez gros, et en résultat de requête j'ai à peu près ce schéma là :
 
... | id_user | nom
 
    | 01234  | bla
 
mais de temps en temps j'ai id_user = "NULL", mais pour le coup quand je fais correspondre l'id avec le nom il ne me sort que les résultats pour lesquels il y a correspondance... La question serait :
 
Comment faire pour que je puisse avoir les valeurs "null" conservées dans l'affichage ? (pour avoir ça : )
 
... | id_user | nom
 
    | 01234  | bla
    | null      | -vide-
 
Une petite idée ?


---------------
http://www.kevintran.fr
mood
Publicité
Posté le 01-12-2011 à 12:08:03  profilanswer
 

n°2114271
Mara's dad
Yes I can !
Posté le 01-12-2011 à 15:17:03  profilanswer
 

Oui, mais donne d'abord un exemple de requête  :)


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°2114272
Mara's dad
Yes I can !
Posté le 01-12-2011 à 15:18:47  profilanswer
 

Sinon la réponse est probablement LEFT JOIN, mais sans requête pour illustrer c'est loin d'être limpide.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°2114277
KevinTran
Photographe
Posté le 01-12-2011 à 15:42:59  profilanswer
 

Je voulais pas donner une requête direct, c'est vrai que j'ai déjà des jointures faites entre les tables :
 

Code :
  1. select d.codsecteur as secteur, d.nuddeext as numero_demande, er.codrefexam as examen, c.nomenclature as code_ccam,
  2.   ec.datrealisation as daterealisation, u.abrutil as lecteur1, sec.abrutil as nomsecretaire
  3. /* , r.nulec2 as lecteur2 */
  4. from diamic.examencot ec, diamic.cotationelem c, diamic.examen e, diamic.demande d, diamic.origine o, diamic.secteur,
  5. diamic.exploitant, diamic.examenref er, diamic.utilisateur u, diamic.resultat r, diamic.utilisateur sec
  6. /* , diamic.utilisateur lec2 */
  7. where ec.nucot = c.nucot and ec.nuexam = e.nuexam and e.nudde = d.nudde and d.nuorig=o.nuorig and u.nuutil=d.nulec
  8. and ec.datrealisation between to_date('01/09/2011','DD/MM/YYYY') and to_date('30/11/2011','DD/MM/YYYY')
  9. and (o.codcatorig like '%') and (c.nomenclature like '%') and (d.codsecteur like '%') and (exploitant.codexploit like '%')
  10. and (c.coeff*ec.qteadm <>0) and c.lettrecle in ('F')
  11. and d.codsecteur = 'S'
  12. and e.nurefexam = er.nurefexam
  13. and d.nudde = r.nudde
  14. and r.nusecretaire = sec.nuutil
  15. /* and r.nulec2 = lec2.nuutil */
  16. and (er.codrefexam = 'OHDCPY' or er.codrefexam = 'OHOTYT')
  17. and d.codsecteur=secteur.codsecteur and exploitant.nuexploit=secteur.nuexploit
  18. order by numero_demande,daterealisation


 
Le truc c'est que j'utilise plusieurs fois la même table (utilisateur), ça fonctionne bien pour le lecteur et la secrétaire.
En gros ce sont des Compte rendus médicaux qui sont lus par plusieurs personnes et la requête sert à ressortir le nom des 3 lecteurs et de la secrétaire => ça fonctionne bien pour le lecteur 1 et la secrétaire qui sont obligatoirement renseignés, mais je n'arrive pas à sortir les autres (conversion n° utilisateur vers le nom) car leur valeur peut être 'null'.
 
 
/* utilisateur : contient l'id et le nom
    resultat : contient les id des gens qui ont lu (lecteur 1, 2, 3, secrétaire) */
 
ça fait un petit moment que j'essaye mais j'y arrive pas :(
Le plus gros souci c'est d'avoir la correspondance n° > nom même pour les valeurs 'null' (qui doivent sortir)


---------------
http://www.kevintran.fr
n°2114280
Mara's dad
Yes I can !
Posté le 01-12-2011 à 15:51:32  profilanswer
 

Un truc du genre :

Code :
  1. SELECT   d.codsecteur AS secteur, d.nuddeext AS numero_demande,
  2.          er.codrefexam AS examen, c.nomenclature AS code_ccam,
  3.          ec.datrealisation AS daterealisation, u.abrutil AS lecteur1,
  4.          sec.abrutil AS nomsecretaire,
  5.          r.nulec2 as lecteur2,
  6.          lec2.abrutil AS nomlecteur2
  7.     FROM diamic.examencot ec,
  8.          diamic.cotationelem c,
  9.          diamic.examen e,
  10.          diamic.demande d,
  11.          diamic.origine o,
  12.          diamic.secteur,
  13.          diamic.exploitant,
  14.          diamic.examenref er,
  15.          diamic.utilisateur u,
  16.          diamic.resultat r,
  17.          diamic.utilisateur sec,
  18.          diamic.utilisateur lec2
  19.    WHERE ec.nucot = c.nucot
  20.      AND ec.nuexam = e.nuexam
  21.      AND e.nudde = d.nudde
  22.      AND d.nuorig = o.nuorig
  23.      AND u.nuutil = d.nulec
  24.      AND ec.datrealisation BETWEEN TO_DATE( '01/09/2011', 'DD/MM/YYYY' )
  25.                                AND TO_DATE( '30/11/2011', 'DD/MM/YYYY' )
  26.      AND( o.codcatorig LIKE '%' )
  27.      AND( c.nomenclature LIKE '%' )
  28.      AND( d.codsecteur LIKE '%' )
  29.      AND( exploitant.codexploit LIKE '%' )
  30.      AND( c.coeff * ec.qteadm <> 0 )
  31.      AND c.lettrecle IN( 'F' )
  32.      AND d.codsecteur = 'S'
  33.      AND e.nurefexam = er.nurefexam
  34.      AND d.nudde = r.nudde
  35.      AND r.nusecretaire = sec.nuutil
  36.      AND r.nulec2 = lec2.nuutil(+)
  37.      AND( er.codrefexam = 'OHDCPY'
  38.           OR er.codrefexam = 'OHOTYT' )
  39.      AND d.codsecteur = secteur.codsecteur
  40.      AND exploitant.nuexploit = secteur.nuexploit
  41. ORDER BY numero_demande, daterealisation


 
le (+) a coté de "lec2.nuutil", c'est la syntaxe d'oracle pour le Left Join.
En gros, Lire : Si pas d'enregistrement en ajouter un avec NULL.
 
A+


Message édité par Mara's dad le 01-12-2011 à 15:53:54

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°2114402
KevinTran
Photographe
Posté le 02-12-2011 à 09:33:38  profilanswer
 

Merci beaucoup ça fonctionne :)
J'avais déjà tenté le (+) mais je l'avais écrit : (+)= au lieu de le mettre juste à côté du champ.


---------------
http://www.kevintran.fr
n°2114634
couak
Posté le 03-12-2011 à 14:14:54  profilanswer
 

heu non le (+) sous oracle c'est pour faire une jointure externe
suivant où tu le place il est jointure externe gauche ou jointure externe droite

n°2114651
Mara's dad
Yes I can !
Posté le 03-12-2011 à 17:33:28  profilanswer
 

couak a écrit :

heu non le (+) sous oracle c'est pour faire une jointure externe
suivant où tu le place il est jointure externe gauche ou jointure externe droite


Je pense que l'erreur était de faire :
r.nulec2 =(+) lec2.nuutil
Au lieu de :
r.nulec2 = lec2.nuutil(+)


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [ORACLE] Remplacement de valeurs "NULL"

 

Sujets relatifs
[ORACLE] - génération d'ARCHIVE LOGS en masseremplacement récursif sur des blocs de codes ciblés
Interpolation sur valeurs de retourNoms de tables accentués sous Oracle
Wamp et OracleOracle et PHP
espaces dans valeurs variable bloque appel à la fonction ?Remplacement de caractère ds un txt
[RESOLU] Remplacement d'un swf par une image pour les tablettesconnection impossible à la BD avec Oracle
Plus de sujets relatifs à : [ORACLE] Remplacement de valeurs "NULL"


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR