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 :

[SQL] Transformer une requête OneRowManyColumns vers OneColumnManyRows [11gR2]


Sujet :

SQL Oracle

  1. #1
    Membre habitué Avatar de domiq44
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 135
    Points
    135
    Par défaut [SQL] Transformer une requête OneRowManyColumns vers OneColumnManyRows
    Bonjour,

    J'ai une requête comme celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT 'AAA' AS col1, 'BBB' AS col2, 'CCC' AS col3 FROM DUAL;
    qui me retourne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    COL1 COL2 COL3
    ---- ---- ----
    AAA  BBB  CCC
    Et je souhaite obtenir cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    COL4
    ----
    AAA  
    BBB  
    CCC
    Comment faire ?
    Merci.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Produit cartésien + CASE :
    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
    SQL>   with t as (
      2  SELECT 'AAA' AS col1, 'BBB' AS col2, 'CCC' AS col3 FROM DUAL
      3  )
      4  select case
      5         when t2.rn = 1 then t.col1
      6         when t2.rn = 2 then t.col2
      7         when t2.rn = 3 then t.col3
      8          end as c
      9    from t
     10   cross join (select level as rn from dual connect by level <= 3) t2;
     
    C
    ---
    AAA
    BBB
    CCC
    Ou UNPIVOT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SQL>   with t as (
      2  SELECT 'AAA' AS col1, 'BBB' AS col2, 'CCC' AS col3 FROM DUAL
      3  )
      4   SELECT *
      5     FROM t
      6  UNPIVOT (c FOR col IN (col1, col2, col3));
     
    COL  C
    ---- ---
    COL1 AAA
    COL2 BBB
    COL3 CCC
     
    SQL>

  3. #3
    Membre habitué Avatar de domiq44
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 135
    Points
    135
    Par défaut
    C'est exacterment ce que je cherchais

    Merci skuatamad pour ta réponse rapide.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Ou avec 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
    WITH t AS
    (
    SELECT 'AAA' AS col1, 'BBB' AS col2, 'CCC' AS col3
      FROM DUAL
    )
    select col1 as col4 
      from t
     UNION all
    select col2
      from t
     UNION all
    select col3
      from t;

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Points : 52
    Points
    52
    Par défaut
    Bonjour,
    Avez-vous essayé d'utiliser la clause PIVOT de la 11g ?

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

Discussions similaires

  1. Problème de conversion d'une requête Oracle vers SQL serveur
    Par sono77 dans le forum Développement
    Réponses: 1
    Dernier message: 01/02/2012, 14h50
  2. Transformer une requête sql dynamique
    Par ttttnht dans le forum Sybase
    Réponses: 5
    Dernier message: 24/07/2007, 07h54
  3. [java - SQL] transformer une Image en BLOB ?
    Par pierre.zelb dans le forum JDBC
    Réponses: 3
    Dernier message: 04/07/2005, 15h04
  4. Affecter résultat SQL d'une requête à une variable
    Par bozolozo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/01/2005, 17h37
  5. Réponses: 7
    Dernier message: 03/06/2004, 12h46

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