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

SQL Oracle Discussion :

Concaténer si valeur NULL


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Par défaut Concaténer si valeur NULL
    Bonjour,

    Je suis assez débutant dans SQL et je suis actuellement en train d'apporter des modifications sur une requête.

    Je voulais concatener la colonne 1 et la colonne 3 dans la colonne 9, si la colonne 9 est vide.

    Voici la requête :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    SELECT colonne1, colonne2, colonne3, colonne4, colonne5, colonne6, colonne7, colonne8, colonne9, colonne10, colonne11, colonne12, colonne13, colonne14, colonne15, colonne16, colonne17, colonne18
      from
    (
    select
    h.doccode as colonne1, 
    d.name as colonne2, 
    TRIM(h.docnum) as colonne3,
    to_char (h.inpdate, 'YYYYMMDD') as colonne4, 
    l.el1 as colonne5, 
    cpt.name as colonne6, 
    l.el2 as colonne7, 
    aux.name as colonne8, 
    replace(replace(l.ref1,';','-'),'|','-')  as colonne9, 
    to_char (h.docdate, 'YYYYMMDD') as colonne10,
    replace(replace(h.descr,';','-'),'|','-') as colonne11,
    ABS(l.valuehome) as colonne12, 
    decode(l.deb_cred_ind,160,'C','D') as colonne13, 
    pay.matchref as colonne14, 
    to_char (l.paydate, 'YYYYMMDD') as colonne15, 
    to_char (h.inpdate, 'YYYYMMDD') as colonne16, 
    ABS(l.valuedoc) as colonne17, 
    h.curdoc as colonne18
    
    from tableA h , tableB l, tableC d, tableD cpt, tableE aux, TableF pay
    where h.cmpcode=l.cmpcode
    and h.cmpcode=d.cmpcode
    and h.cmpcode=cpt.cmpcode
    and h.cmpcode=aux.cmpcode
    and l.cmpcode=pay.cmpcode(+)
    and l.doccode=pay.doccode(+)
    and l.docnum=pay.docnum(+)
    and l.doclinenum=pay.doclinenum(+)
    and l.el1 between '1000000' and '1500000'
    and h.doccode=l.doccode
    and h.docnum=l.docnum
    and h.doccode=d.code
    and cpt.code=l.el1
    and cpt.elmlevel=1
    and aux.code=l.el2
    and aux.elmlevel=2 
    order by inpdate)
    Merci d'avance de votre aide!

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 133
    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 133
    Par défaut
    Tu ne connais pas les fonctions COALESCE (ANSI) ou NVL (spécifique Oracle) ?
    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 actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Par défaut
    Non je ne connais pas ces fonctions.

    J'ai essayé avec la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Case
      When colonne9 = NULL THEN concat(colonne 1,colonne 3)
    Mais cela n'a pas fonctionner

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 133
    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 133
    Par défaut
    L'expression colonne9 = NULL ne sera jamais vraie.
    NULL n'est égal à rien, même pas à NULL.
    Il faudrait écrire colonne9 IS NULL
    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.

  5. #5
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Par défaut
    Merci pour cette préçision.

    Mais ma requête ne fonctionne toujours pas.

    D'avance merci

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 133
    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 133
    Par défaut
    Citation Envoyé par adilsonn Voir le message
    ma requête ne fonctionne toujours pas.
    Quelle requête ? avec quel message d'erreur ?
    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.

  7. #7
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Par défaut Problème script sql developer oracle
    Bonjour,

    Je suis assez débutant sur SQL Developper et j'aimerai avoir votre aide svp.

    Dans une requête
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    SELECT Donnée1, Donnée2, Donnée3, Donnée4, Donnée5, Donnée6, Donnée7, Donnée8, Donnée9, Donnée10, Donnée11, Donnée12, Donnée13, Donnée14, Donnée15, Donnée16, Donnée17, Donnée18
    from
    (
    select
    h.doccode as Donnée1, 
    d.name as Donnée2, 
    TRIM(h.docnum) as Donnée3,
    to_char (h.inpdate, 'YYYYMMDD') as Donnée4, 
    l.el1 as Donnée5, 
    cpt.name as Donnée6, 
    l.el2 as Donnée7, 
    aux.name as Donnée8, 
    NVL (concat(h.doccode, h.docnum), l.ref1) as Donnée9,  
    to_char (h.docdate, 'YYYYMMDD') as Donnée10,
    replace(replace(h.descr,';','-'),'|','-') as Donnée11,
    ABS(l.valuehome) as Donnée12, 
    decode(l.deb_cred_ind,160,'C','D') as Donnée13, 
    pay.matchref as Donnée14, 
    to_char (l.paydate, 'YYYYMMDD') as Donnée15, 
    to_char (h.inpdate, 'YYYYMMDD') as Donnée16, 
    ABS(l.valuedoc) as Donnée17, 
    h.curdoc as Donnée18
     
    from Table1 h , Table2 l, Table3 d, Table4 cpt, Table5 aux, Table6 pay
    where h.cmpcode=l.cmpcode
    and h.cmpcode=d.cmpcode
    and h.cmpcode=cpt.cmpcode
    and h.cmpcode=aux.cmpcode
    and l.cmpcode=pay.cmpcode(+)
    and l.doccode=pay.doccode(+)
    and l.docnum=pay.docnum(+)
    and l.doclinenum=pay.doclinenum(+)
    and h.yr=2011
    and h.inpdate < '20/01/2011'
    and h.doccode=l.doccode
    and h.docnum=l.docnum
    and h.doccode=d.code
    and cpt.code=l.el1
    and cpt.elmlevel=1
    and aux.code=l.el2
    and aux.elmlevel=2 
    order by inpdate);
    Mon premier problème au niveau de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NVL (concat(h.doccode, h.docnum), l.ref1) as Donnée9,
    Je veux que : Si Donnée9 est vide, concaténer doccode et docnum.

    Mais le problème c'est qu'il fait un concaténer pour toutes les colonnes Donnée9 même ceux qui présentent une valeur.

    Mon second problème au niveau de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ABS(l.valuedoc) as Donnée17,
    Ce que je veux, c'est qu'il me prend la valeur absolue de Donnée17 avec les décimales.

    Mais le problème c'est qu'il ne prend pas les décimales, mais que les entiers.

    Pouvez-vous m'aider svp ?

    Merci d'avance

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 133
    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 133
    Par défaut
    Ce que tu décris n'est pas cohérent :
    Mon premier problème au niveau de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NVL (concat(h.doccode, h.docnum), l.ref1) as Donnée9,
    Je veux que : Si Donnée9 est vide, concaténer doccode et docnum.
    Mais le problème c'est qu'il fait un concaténer pour toutes les colonnes Donnée9 même ceux qui présentent une valeur.
    Donnée9 est le résultat de l'expression. Elle ne peut pas se calculer sur son propre résultat

    Si que tu voulais dire est : Si l.ref1 est vide, concaténer doccode et docnum., alors il faut que tu revérifies la syntaxe de la fonction NVL : tu en as inversé les arguments.
    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.

  9. #9
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Par défaut
    Merci.

    Effectivement, j'ai inversé les arguments.

    Mais on inversant les arguments, il ne prend pas en compte la condition. C'est à dire il laisse les cellules de donnée9 vide, sans concaténer les 2 valeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NVL(l.ref1, concat(h.doccode, h.docnum)) as Donnée9,
    Merci

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 133
    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 133
    Par défaut
    Je crains que tu ne buttes sur la notion de vide.
    La fonction NVL teste sur NULL. Si ta colonne l.ref1 contient ne serait-ce qu'un espace, elle n'est pas NULL.
    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.

  11. #11
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Par défaut
    Merci beaucoup,

    Je viens de vérifier sur la base et il y a bien un espace dans les cellules vides.

    Dans ce cas la, quelle est la fonction a utilisé ?

    d'avance merci

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

Discussions similaires

  1. requete avec la valeur NULL
    Par Hinkel dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/11/2008, 16h39
  2. Concaténation valeur null
    Par bobosh dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/08/2008, 11h46
  3. Selectionner un champ de valeur nulle
    Par arcane dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/09/2003, 14h26
  4. [CR9] conversion de valeurs NULL
    Par ministry dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 12/09/2003, 11h41
  5. Valeurs Nulles ou Valeurs à Zéro
    Par LLaurent dans le forum XMLRAD
    Réponses: 5
    Dernier message: 30/07/2003, 11h40

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