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 :

Afficher un champ en fonction de sa valeur [11g]


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 934
    Points : 348
    Points
    348
    Par défaut Afficher un champ en fonction de sa valeur
    Bonjour,

    j'ai une requête qui me génère un long fichier excel et pour certaines données je cherche à afficher que les champs en fonction de sa valeur.
    voici mon code

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
     
    SELECT distinct TA.identifiant,
     
    NVL((select libelle from table2 t2 
    where t2.VALEUR=fonction(id,sysdate, -1, 'codeas01')
    and t2.code=36),'-') 
    as "codeas01", 
     
    NVL((select libelle from table2 t2 
    where t2.VALEUR=fonction(id,sysdate, -1, 'codeas02')
    and t2.code=36),'-') 
    as "codeas02", 
     
    NVL((select libelle from table2 t2 
    where t2.VALEUR=fonction(id,sysdate, -1, 'codeas03')
    and t2.code=36),'-') 
    as "codeas03", 
    nvl(
    case     
        when
    		NVL((select libelle from table2 t2 
    		where t2.VALEUR=fonction(id,sysdate, -1, 'codeas570')
    		and t2.code=36),'-')='Oui' 
        or
    		NVL((select libelle from table2 t2 
    		where t2.VALEUR=fonction(id,sysdate, -1, 'codeas590')
    		and t2.code=36),'-')='Oui' 
        then 'VALEUR 1' 
        when 
    		NVL((select libelle from table2 t2 
    		where t2.VALEUR=fonction(id,sysdate, -1, 'codeas620')
    		and t2.code=36),'-')='Oui' 
        or
     		NVL((select libelle from table2 t2 
    		where t2.VALEUR=fonction(id,sysdate, -1, 'codeas5980')
    		and t2.code=36),'-')='Oui'    
        or
     		NVL((select libelle from table2 t2 
    		where t2.VALEUR=fonction(id,sysdate, -1, 'codeas51260')
    		and t2.code=36),'-')='Oui'   
        or
     		NVL((select libelle from table2 t2 
    		where t2.VALEUR=fonction(id,sysdate, -1, 'codea987')
    		and t2.code=36),'-')='Oui'      
    then 'VALEUR 2'
    end,'-') "Organisation Pro."
    FROM table1 ta 
    inner join .........
    inner join ..........
     
    ;
    ce que je souhaite faire donc c'est de ne faire apparaitre que les champs qui ont pour valeur "oui", si l'un des champs est a null, je ne veut pas le faire apparaitre dans le fichier excel, ce qui me vaudrait un gain de place dans le fichier.
    exemple :
    codeas570 = oui, il apparait dans une colonne de mon fichier
    codeas590 = null : il n'apparait pas
    codeas620=null : idem
    codeas5980 = oui il apparait
    codeas51260 = oui il apparait
    codea987 = null on ne le voit pas

    et donc à la generation du résultat, on ne verrait apparaitre à la suite des colonnes, les colonnes : codeas570 , codeas5980 , codeas51260 .

    (pour vous faire une idée, j'ai une vingtaine de champ concerné, mais pour une personne, 4 champs sont à oui maximum, donc pour une personne au lieu de faire apparaitre les 20 champs avec des valeurs null, on ne ferait apparaitre que 4 champs, que ceux qui sont à "oui", est ce possible ?

    un grand merci à vous

  2. #2
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 792
    Points : 1 511
    Points
    1 511
    Par défaut
    Bonsoir,

    Quelle est la demande ?

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 934
    Points : 348
    Points
    348
    Par défaut
    Bonjour
    et bien savoir si c'est possible d'afficher un champ dans le résultat de la requête, en fonction de sa valeur.

    Comme cité dans mon exemple, j'ai une vingtaine de champs ( par exemple ) :champ1,champ2,.....,champs20 et si un ou plusieurs d'entre eux est égale à "oui" alors on l'affiche dans le résultat de la requête.

    Par exemple, si je fais tourne ma requête il me ressort : champ4,champ12,champ13,champ17,champ20 car ceux ci ont la valeur "oui"
    est ce possible ?

    Merci

  4. #4
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    C'est possible mais pas forcément très optimisé ni très aisé en SQL (Le PL/SQL serait plus indiqué à mon avis)
    Pour ce faire, il faudrait savoir pour chaque colonne si on a une valeur à afficher ou non et procéder à une concaténation des colonnes affichables.

    Le soucis va aussi être d'afficher en entête le nom de la colonne car avec cette solution on aura une seule colonne dont le contenu va être géré en dynamique.

    Pour schématiser tout ça, il faudrait un code qui ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT a, b, 
      DECODE(Display_C1, 0, '', C1||';')||DECODE(Display_C2, 0, '', C2||';')||etc.. AS Col_Dyna
    FROM MaTable
    WHERE 1=1

  5. #5
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 934
    Points : 348
    Points
    348
    Par défaut
    Bonjour,

    avec ton explication, j'ai re

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    decode(
    NVL((select t2.libelle from table1 t2 
    where t2.valeur=fonction(ta.id, -..., 'az98765')
    and t2.valeur=48),'-') ,'Oui','texte 1','text2',' ',' '
    )||'  ' ||
     
    decode(
    NVL((select t2.libelle from table1 t2 
    where t2.valeur=fonction(ta.id, -..., 'az25777')
    and t2.valeur=48),'-') ,'Oui','texte 1','text2',' ',' '
    )||'  ' ||
    etc...
    et ça marche bien, merci à vous

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 29/07/2015, 09h53
  2. [AC-2007] Afficher la date dans un champ en fonction de la valeur d'un autre
    Par sylvain60 dans le forum IHM
    Réponses: 11
    Dernier message: 26/03/2013, 20h34
  3. [WD-2002] Afficher un champ en fonction de la valeur d'une liste déroulante
    Par babycoca dans le forum Word
    Réponses: 7
    Dernier message: 07/10/2009, 11h03
  4. Réponses: 12
    Dernier message: 13/02/2007, 14h21
  5. afficher une image en fonction de la valeur d un champ
    Par zahiton dans le forum Langage
    Réponses: 3
    Dernier message: 24/01/2006, 16h22

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