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 colonnes en lignes


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Par défaut Transposer colonnes en lignes
    Bonjour,

    j'ai une table que je voudrais transformer.
    La table se présente ainsi :

    CodeProduit UN_Jan2010 UN_Fev2010 CA_Jan2010 CA_Fev2010
    11111111 1000 14000 25525 20120
    les entêtes de colonnes correspondent à des quantités vendues par mois (UN pour unité, et 012010 pour Janvier 2010) et au CA.
    Je voudrais transposer ces données dans un format plus exploitable :

    CodeProduit Periode UN CA
    1111111 012010 1000 25525
    1111111 022010 14000 22120

    Existe t'il un fonction Oracle ou une manière simple de procéder à cette transformation ?

    Merci d'avance,

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    En 11g vous avez la fonction UNPIVOT, sinon le classique UNION ALL :
    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
    With SR as
    (
    select 11111111 as CodeProduit
         , 1000     as UN_Jan2010
         , 14000    as UN_Fev2010
         , 25525    as CA_Jan2010
         , 20120    as CA_Fev2010
      from dual
    )
    select CodeProduit, '012010' as Periode, UN_Jan2010 as UN, CA_Jan2010 as CA from SR union all
    select CodeProduit, '022010'           , UN_Fev2010      , CA_Fev2010       from SR;
     
    CODEPRODUIT PERIOD         UN         CA
    ----------- ------ ---------- ----------
       11111111 012010       1000      25525
       11111111 022010      14000      20120

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Une instruction insert multi-table permet de faire ce type de transformation facilement.

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    dans sqlplus, fold_after

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    COL CA FOLD_A
    SELECT
      CodeProduit, '012010' AS Periode, UN_Jan2010 AS UN, CA_Jan2010 AS CA ,
      CodeProduit, '022010' AS Periode, UN_Fev2010 AS UN, CA_Fev2010 AS CA
    FROM SR;
    CODEPRODUIT PERIOD         UN         CA
    ----------- ------ ---------- ----------
    CODEPRODUIT PERIOD         UN         CA
    ----------- ------ ---------- ----------
       11111111 012010       1000      25525
       11111111 022010      14000      20120
     
            111 012010         10        255
            111 022010        140        200

  5. #5
    Membre Expert
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Par défaut
    Merci pour vos réponses.

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

Discussions similaires

  1. Transposer une colonne en ligne
    Par mouncefdi dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 13/03/2009, 12h03
  2. Transposer les colonnes en lignes
    Par taisherg dans le forum SAS Base
    Réponses: 9
    Dernier message: 03/12/2008, 16h51
  3. Transposer colonne/ligne d'une table
    Par dashblade dans le forum IHM
    Réponses: 2
    Dernier message: 17/06/2008, 15h25
  4. transposer colonnes en lignes
    Par freestyler dans le forum Oracle
    Réponses: 5
    Dernier message: 05/04/2007, 14h32
  5. [SQL] Transposer des colonnes en lignes + LIKE et SOUNDEX
    Par Anne1969 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 23/11/2005, 13h44

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