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 :

Optimisation requête plusieurs champs dans un seul [11g]


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    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 : 933
    Points : 348
    Points
    348
    Par défaut Optimisation requête plusieurs champs dans un seul
    Bonjour,

    je suis sur une enorme requête et dans celle ci je récupère plusieurs code, de la manière suivante :

    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
     
    select ta.identifiant as identifiant,
    NVL((select t2.libelle 
    from parametre t2 
    where t2.VALEUR=fonction(ta.id,1, 'Code123456')
    and t2.ifreft1=12),' ') 
    as Code123456,
     
    NVL((select t2.libelle 
    from parametre t2 
    where t2.VALEUR=fonction(ta.id,1, 'Code45698877')
    and t2.ifreft1=13),' ') 
    as Code123456--,
     
    NVL((select t2.libelle 
    from parametre t2 
    where t2.VALEUR=fonction(ta.id,1, 'Code7777')
    and t2.ifreft1=14),' ') 
    as Code123456--,
     
    NVL((select t2.libelle 
    from parametre t2 
    where t2.VALEUR=fonction(ta.id,1, 'Code66666')
    and t2.ifreft1=15),' ') 
    as Code123456--,
    from tableTa ta
    ....
    ...
    ....
    le résultats des sous requête de la selection des code est soit "oui", soit vide (donc non)


    dans le fichier excel, j'ai donc :
    identifiant Code123456 Code45698877 Code7777 Code66666
    oui oui oui

    mais moi comme je sélectionne une multitude de champs , j'aimerais qu'il ne m'affiche que les champs, pour lesquels il est à "oui", par exemple dans notre requête, j'aimerais qu'il m'affiche dans une colonne "Code45698877 :oui" et "Code66666:oui"

    est ce possible?

    merci à vous

  2. #2
    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
    Bonjour,

    Ca peut se faire en concaténant les résultats mais dans ce cas vous n'aurez qu'une seule colonne pour les différents codes avec un séparateur ( ; dans l'exemple)
    Donc vous aurez une colonne "Identifiant" puis une autre "Valeurs"

    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
    select ta.identifiant as identifiant,
    NVL((select 'Code123456:'||t2.libelle||';'
    from parametre t2 
    where t2.VALEUR=fonction(ta.id,1, 'Code123456')
    and t2.ifreft1=12),'') 
    ||
    NVL((select 'Code45698877:'||t2.libelle||';' 
    from parametre t2 
    where t2.VALEUR=fonction(ta.id,1, 'Code45698877')
    and t2.ifreft1=13),'') 
    || 
    NVL((select 'Code7777:'||t2.libelle||';' 
    from parametre t2 
    where t2.VALEUR=fonction(ta.id,1, 'Code7777')
    and t2.ifreft1=14),'') 
    as Valeurs

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    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 : 933
    Points : 348
    Points
    348
    Par défaut
    ça m'a l'air pas mal, mais est ce possible de faire cette méthode, en n'affichant les codes que s'ils sont égale à oui? Dans ce cas il faut le faire dans un case n'est ce pas ?

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    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 : 933
    Points : 348
    Points
    348
    Par défaut
    En fait c'est bon, j'ai fais un test avec le morceau de code en exemple, sauf que j'ai mis comme séparateur un espace et le rendu est assez bien

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/05/2009, 20h42
  2. Plusieurs champs dans 1 seul champ
    Par lionel256 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 07/04/2008, 10h44
  3. Réponses: 7
    Dernier message: 19/09/2006, 18h02
  4. [Requête] plusieurs champs dans une même table ayants la même source
    Par Christophe93250 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 25/04/2006, 16h18
  5. regrouper plusieurs champ dans un seul en requete
    Par Nicko29 dans le forum Access
    Réponses: 12
    Dernier message: 07/09/2005, 18h29

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