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

Oracle Discussion :

créer des nom de champs à partir de données d'une table


Sujet :

Oracle

  1. #1
    Membre habitué Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Points : 173
    Points
    173
    Par défaut créer des nom de champs à partir de données d'une table
    Bonjour,

    Désolée pour le titre mais je n'ai pas su faire plus explicite.
    Donc mon soucis se situe au niveau d'une requete sql assez complexe.

    J'ai des magasins et des détails concernant ceux-ci et j'aimerai ajouter au résultat de ma requetes, autant de colonnes qu'il existe de groupe de magasins... et là je sèche complètement.

    Voici 'en gros' mon modèle de données:

    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
     
    GROUPE                
    --------              
    grp_code       
    grp_lib          
     
    GROUPE_MAG  
    -------------    
    gm_grp_code 
    gm_mag_code  
     
    MAGASIN 
    ---------- 
    mag_code
    mag_nom
    mag_adr1 
    ...
    Et j'aimerai obtenir un résultat du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mag_nom | groupe1 | groupe2 | groupe3 
    ------------------------------------- 
    Auchan  |   x     |         |    x
    Si l'un d'entre-vous aurais une piste pour moi, il illuminerai ma journée

    Remarque: Mon soucis est qu'un meme magasin peut appartenir à plusieur groupe, sinon je me serai contenté d'afficher le nom du groupe auquel il appartient.

    Merci

    Le développement est un art capilotracté
    .____________________________________
    | SGBDR : Oracle 8
    | PHP Version 5.0.4
    | SERVEUR Apache 2.0 hébergé par Linux (Fédora)
    | C++ sous visual studio 6
    | JAVA sous JBuilder2006 Entreprise
    |____________________________________

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Je sais pas si ça peut t'aide mais voilà un modèle de requête que j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select o1.ORD_ID, 
             o1.ORL_ID, 
             o1.lif_id,
             (select o2.LIF_LABEL from ctb_orlinformation o2 where o1.ord_id=o2.ord_id and o1.orl_id=o2.ORL_ID and o1.lif_id=o2.lif_id and o2.IFT_ID=0) "Nom du bénéficiaire",
             (select o2.LIF_LABEL from ctb_orlinformation o2 where o1.ord_id=o2.ord_id and o1.orl_id=o2.ORL_ID and o1.lif_id=o2.lif_id and o2.IFT_ID=1) "Semaine de la prestation",
             (select o2.LIF_LABEL from ctb_orlinformation o2 where o1.ord_id=o2.ord_id and o1.orl_id=o2.ORL_ID and o1.lif_id=o2.lif_id and o2.IFT_ID=2) "Date de naissance",
             (select o2.LIF_LABEL from ctb_orlinformation o2 where o1.ord_id=o2.ord_id and o1.orl_id=o2.ORL_ID and o1.lif_id=o2.lif_id and o2.IFT_ID=3) "Catégorie Socio-Professionelle",
             (select o2.LIF_LABEL from ctb_orlinformation o2 where o1.ord_id=o2.ord_id and o1.orl_id=o2.ORL_ID and o1.lif_id=o2.lif_id and o2.IFT_ID=4) "Adresse de livraison",
             (select o2.LIF_LABEL from ctb_orlinformation o2 where o1.ord_id=o2.ord_id and o1.orl_id=o2.ORL_ID and o1.lif_id=o2.lif_id and o2.IFT_ID=5) "Station",
             (select o2.LIF_LABEL from ctb_orlinformation o2 where o1.ord_id=o2.ord_id and o1.orl_id=o2.ORL_ID and o1.lif_id=o2.lif_id and o2.IFT_ID=6) "Date prestation souhaitée",
             (select o2.LIF_LABEL from ctb_orlinformation o2 where o1.ord_id=o2.ord_id and o1.orl_id=o2.ORL_ID and o1.lif_id=o2.lif_id and o2.IFT_ID=7) "Taille (S, M, L, XL)"
    from ctb_orlinformation o1

    C'est une sorte de requête pivot

  3. #3
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Ce que tu cherches à faire c'est un tableau croisé dynamique et je ne pense pas que cela soit faisable en une seule requête.

    Ce que tu peux éventuellement faire si tu es en 9i ou supérieur, c'est ramener pour un magasin, tous les groupes auxquels il appartient. Pour faire cela fait une recherche dans le forum sur les fonctions d'aggrégation.

    [EDIT] Comme je suis dans un bon jour :
    http://www.developpez.net/forums/sho...98&postcount=4
    [/EDIT]
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  4. #4
    Membre habitué Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Points : 173
    Points
    173
    Par défaut
    Merci pour vos réponse, effectivement, ce que je souhaite faire n'est pas possible en une seule étape.

    J'ai donc décidé de le faire en 2 étapes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT 'NVL((SELECT ''Oui'' FROM RAL_GROUPE, RAL_GRP_MAG
                        WHERE RG_CODE = RGM_GRP_CODE 
                            AND RGM_MAG_CODE = PCH_MAG 
                            AND RGM_GRP_CODE = '||RG_CODE||'),''Non'') '||RG_LIB||','
      FROM RAL_GROUPE
    Et le résultat de cette requete sera insérer dans la 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
    SELECT QUAI_NUM,
    	   PCH_EXP,
    	   PCH_MAG,
    	   MAG_NOM,
    	   PCH_CODE,
    	   (SELECT COUNT(1) FROM BAC WHERE BAC_PCHC = PCH_CODE) NB_BAC,
           NVL((SELECT SUM(CP_QTEC) FROM CP WHERE CP_PCHC = PCH_CODE),0) NB_CC,
           NVL((SELECT COUNT(1) FROM CA WHERE CA_PCHC = PCH_CODE),0) NB_CA,
           NVL((SELECT COUNT(1) FROM CS WHERE CS_PCHC = CS_CODE),0) NB_CS,
           TO_CHAR(PCH_DATE,'DD/MM/YY') 
    	   DATE_PREP,
    	   //résultat de la requete précédente greffé ici,
    	   MAG_VAGUEM VAG
      FROM PCH, MAGASIN, QUAI
     WHERE PCH_ETAT = 20 
       AND PCH_MAG = MAG_CODE 
       AND MAG_QUAI = QUAI_CODE
       AND TRUNC(PCH_DATE)<trunc(sysdate)
       AND MAG_VAGUEM IN (1,2,3,4)
       AND MAG_ADR1 != 'DEBORD'
     ORDER BY VAG,DATE_PREP,QUAI_NUM,PCH_MAG,PCH_CODE

    Le développement est un art capilotracté
    .____________________________________
    | SGBDR : Oracle 8
    | PHP Version 5.0.4
    | SERVEUR Apache 2.0 hébergé par Linux (Fédora)
    | C++ sous visual studio 6
    | JAVA sous JBuilder2006 Entreprise
    |____________________________________

  5. #5
    Membre habitué Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Points : 173
    Points
    173
    Par défaut
    Citation Envoyé par plaineR
    Ce que tu cherches à faire c'est un tableau croisé dynamique et je ne pense pas que cela soit faisable en une seule requête.

    Ce que tu peux éventuellement faire si tu es en 9i ou supérieur, c'est ramener pour un magasin, tous les groupes auxquels il appartient. Pour faire cela fait une recherche dans le forum sur les fonctions d'aggrégation.

    [EDIT] Comme je suis dans un bon jour :
    http://www.developpez.net/forums/sho...98&postcount=4
    [/EDIT]
    je suis sous oracle 8

    Le développement est un art capilotracté
    .____________________________________
    | SGBDR : Oracle 8
    | PHP Version 5.0.4
    | SERVEUR Apache 2.0 hébergé par Linux (Fédora)
    | C++ sous visual studio 6
    | JAVA sous JBuilder2006 Entreprise
    |____________________________________

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/08/2012, 18h35
  2. Valeur d'un champ à partir de celui d'une table de référence
    Par rns2008 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/05/2008, 23h19
  3. Créer des allias sur des noms de champ
    Par 33ctdebut dans le forum Access
    Réponses: 3
    Dernier message: 02/03/2007, 10h47
  4. Transférer des noms de champs en données
    Par jalbec dans le forum VBA Access
    Réponses: 6
    Dernier message: 03/11/2006, 17h05
  5. Légende des boutons à partir de données d'une table
    Par yancimer dans le forum Access
    Réponses: 4
    Dernier message: 12/09/2006, 10h46

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