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 :

"Transposer" les données d'une table [11g]


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 29
    Par défaut "Transposer" les données d'une table
    Bonjour,

    je viens poser une question sûrement assez basique, et aimerais avoir quelques conseils sur la meilleure stratégie pour arriver à mes fins.

    J'ai une table de la forme suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Département    Indicateur    Valeur
    ------------   ----------   ------
    A                01            123
    A                02            823
    A                03            584
    ...
    B                01            45
    B                02            64
    B                03            789
    ...
    Et je souhaiterais en tirer une nouvelle table de la forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Département    Indicateur01    Indicateur02    Indicateur03 ...
    ------------    ------------    ------------    ------------
    A                123             823             584
    B                45              64              789
    ...
    Je précise que j'ai 26 départements et 72 catégories.

    J'imagine qu'une procédure assez simple en PL/SQL devrait me permettre d'arriver à ça, mais mes connaissances dans le domaine sont très limitées...

    Je souhaiterais trouver une solution assez générique car je devrai répéter cela pour d'autres tables (pas forcément avec le même nombre de départements ou d'indicateurs).

    Tous conseils bienvenus!

    Merci d'avance et bonne fin de journée

    Stéphane

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    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 136
    Par défaut
    Le mot clé à rechercher est PIVOT
    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 averti
    Inscrit en
    Mai 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 29
    Par défaut
    Merci!

    Je vais regarder dans cette direction. Si je trouve rapidement une solution, je reviendrai la poster ici, pour future référence.

    Stéphane

  4. #4
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 29
    Par défaut
    C'est effectivement le mot-clé qui me manquait et une recherche là-dessus m'a rapidement permis de résoudre mon problème.

    Cela dit, bien que la syntaxe de PIVOT soit plus élégante, j'ai personnellement trouvé plus intuitif d'utiliser l'"ancienne" méthode, avec toute une série de CASE. Sans compter que cette ancienne méthode marchera aussi avec les versions d'Oracle < 10.

    Dans l'exemple ci-dessus, ça donnerait:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Département, 
        MAX(CASE Indicateur WHEN '01' THEN Valeur END) AS ind01,
        MAX(CASE Indicateur WHEN '02' THEN Valeur END) AS ind02,
        MAX(CASE Indicateur WHEN '03' THEN Valeur END) AS ind03
    FROM MaTable
    GROUP BY Département

    Encore merci!

    Stéphane

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

Discussions similaires

  1. Problème pour lire les donnée d'une table externe
    Par mardoch dans le forum SQL*Loader
    Réponses: 6
    Dernier message: 17/07/2008, 16h41
  2. comment modifier les données d'une table à travers un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 12
    Dernier message: 19/07/2005, 09h51
  3. MySQL Administrator : modifier les données d'une table
    Par Robinounou dans le forum Outils
    Réponses: 4
    Dernier message: 13/07/2005, 17h21
  4. transformer les données d'une table .dbf vers ma BD
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 2
    Dernier message: 30/11/2004, 09h54

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