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 :

Transposer une table en une autre


Sujet :

SQL Oracle

  1. #1
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut Transposer une table en une autre
    Bonjour,

    je cherche à transposer une table de la forme

    code id_question rep rep1 rep2 rep3
    rep à rep3 sont du même type,
    l'objectif est de se retrouver sous la forme

    code id_question rep date_année avec une colonne supplémentaire gérant la date.

    rep1 correspond à la date - 1 année
    rep2 correspond à la date -2 année
    rep3 correspond à la date - 3 année
    j'ai entendu parlé de la notion de PIVOT

    Savez-vous comment faire ou m'aider ?

    Olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    C'est le contraire d'un PIVOT que tu cherches à faire
    C'est plutôt de la normalisation (mise en forme normale).

    Si j'ai bien compris ton problème, le principe est simple :
    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
    SELECT  code
        ,   id_question
        ,   rep
        ,   XXX     AS date_année
    FROM    matable
    UNION
    SELECT  code
        ,   id_question
        ,   rep1    AS rep
        ,   YYY     AS date_année
    FROM    matable
    UNION
    ...
    UNION
    SELECT  code
        ,   id_question
        ,   rep3    AS rep
        ,   ZZZ     AS date_année
    FROM    matable
    ;
    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 émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut,

    Pour compléter la réponse d'al1 :
    - Dans sa solution, je propose UNION ALL qui économise un dédoublonnage inutile (vu qu'il n'est pas censé y avoir de doublons)
    - Tu peux plutôt regarder UNPIVOT si t'es en version >= 11
    - Tu peux aussi simplement faire le produit cartésien avec une table à trois lignes + utilisation du case (ce qui évite de faire 3 scans de la table)

    Des exemples UNPIVOT et produit cartésien dans le troisième point d'un article que j'ai écrit (pour une autre raison) :
    http://pacmann.over-blog.com/article...119768688.html

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 10h17
  3. Réponses: 1
    Dernier message: 19/10/2011, 12h13
  4. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  5. Copier les enregistrements d'une table vers une table d'une autre DB
    Par karinette21 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/11/2008, 21h50

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