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

Langage SQL Discussion :

Problème ligne/colonne requête SQL


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Problème ligne/colonne requête SQL
    Bonjour,

    Je cherche actuellement à effectuer une requête SQL dans une base de données Oracle d'une GMAO.

    J'arrive bien à sortir les données qui m'intéressent, cependant, la mise en forme de sortie n'est pas très lisible.

    Je m'explique :

    J'ai une table "box" et une sous-table "charact_box".
    A chaque champ "charact_value" de la table "charact_box" est associé un "cd_param" identifiant le champ.
    Le soucis est que lorsque j'effectue la requête qui suit, les données "charact_value" prennent une ligne différente pour chaque "cd_param" du même "cd_box".

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CD_BOX	TXT_CHARACT_VALUE	CD_PARAM
    200             1                       NB1
    200	           2                       NB2
    200	           3                       NB3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select b.cd_box, s22.charact_box.txt_charact_value, s22.charact_box.cd_param 
    FROM s22.box b 
    left join s22.charact_box on b.cd_box = s22.charact_box.cd_box
    Je souhaiterais que les données correspondant au même "cd_box" ressortent sur la même ligne (avec éventuellement en titre des colonnes le "cd_param").

    Après pas mal de recherches, je me demande si je fait bien de chercher une solution en SQL, et si je ne ferais pas mieux de chercher à traiter les données extraites via excel.
    J'ai pu trouver la fonction "PIVOT", qui semble à peut prêt correspondre à ce que je souhaite faire, mais en vain, impossible de l'appliquer à ma requête, la version Oracle n'est pas assez récente.

    En espérant avoir été explicite, je reste ouvert à toute aide que l'on pourrait m'apporter.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Si vous connaissez le nombre de valeurs différentes de txt_charact_value différentes, vous pouvez faire comme ça :
    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
    SELECT b.cd_box,  
           max(
             CASE WHEN s22.charact_box.txt_charact_value = 1 THEN s22.charact_box.cd_param 
                  ELSE NULL
             END
           ) AS CD_PARAM_1,  
           max(
             CASE WHEN s22.charact_box.txt_charact_value = 2 THEN s22.charact_box.cd_param 
                  ELSE NULL
             END 
           ) AS CD_PARAM_2,  
           max(
             CASE WHEN s22.charact_box.txt_charact_value = 3 THEN s22.charact_box.cd_param 
                  ELSE NULL
             END 
           ) AS CD_PARAM_3
    FROM s22.box b 
    LEFT JOIN s22.charact_box ON b.cd_box = s22.charact_box.cd_box
    GROUP BY b.cd_box;

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Bonjour et merci de la réponse rapide.

    Cà me semble en effet une bonne solution pour passer les "value" des "cd_param" un par un.

    La valeur fixe étant le "cd_param" j'inverserais donc les "s22.charact_box.txt_charact_value" avec les "s22.charact_box.cd_param"

    ce qui donnerait :

    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
    SELECT b.cd_box,  
           max(
             CASE WHEN s22.charact_box.cd_param = 1 THEN  s22.charact_box.txt_charact_value
                  ELSE NULL
             END
           ) AS CD_PARAM_1,  
           max(
             CASE WHEN s22.charact_box.cd_param = 2 THEN  s22.charact_box.txt_charact_value
                  ELSE NULL
             END
           ) AS CD_PARAM_2,   
           max(
             CASE WHEN s22.charact_box.cd_param = 3 THEN  s22.charact_box.txt_charact_value
                  ELSE NULL
             END
           ) AS CD_PARAM_3 
    FROM s22.box b 
    LEFT JOIN s22.charact_box ON b.cd_box = s22.charact_box.cd_box
    GROUP BY b.cd_box;

    Je teste çà dès que possible et vous ferais un retour au plus vite.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Ca fonctionne parfaitement !

    Merci beaucoup Snipah !!

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

Discussions similaires

  1. Problème colonne requête SQL
    Par chlolo5 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 13/11/2011, 11h41
  2. [SQL] Problème PHP et requête SQL
    Par Pepito dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/05/2006, 02h41
  3. [MySQL] Problème avec une requête SQL
    Par chobol dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 11/05/2006, 12h29
  4. [VB]Problème avec une requête SQL
    Par Tyrael62 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 18/03/2006, 17h47
  5. Problème pour bâtir requête SQL
    Par Val2005 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/11/2005, 15h49

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