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 :

transformer des colonnes en lignes


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 49
    Points : 37
    Points
    37
    Par défaut transformer des colonnes en lignes
    Bonjour

    J'ai un problème que l'on me pose assez fréquemment mais que je n'arrive pas a résoudre: je souhaiterai transformer des colonnes issue d'une requetes sql en lignes et touta ca avec requête SQL et non en plsql ou creation de table.

    Si vous avez des pistes ...

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    des colonnes en ligne ???? (le contraire me surprendrait moins)

    vous pouvez toujours utiliser les unions, mais bonjour le résultat !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT ename FROM EMP WHERE empno = ...
    UNION
    SELECT job FROM EMP WHERE empno = ...
    UNION
    SELECT to_char(sal) FROM EMP WHERE empno = ...
    ...
    [édité par Sheik]
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 49
    Points : 37
    Points
    37
    Par défaut lignes en colonnes
    Exact, des lignes en colonnes!!!

    N'y a t'il pas d'autres solutions?

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Bon alors : des lignes en colonnes ou des colonnes en lignes :
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  5. #5
    CD
    CD est déconnecté
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 127
    Points : 151
    Points
    151
    Par défaut
    Un petit exemple sur ce que vous cherchez ?

    Table, 2-3 lignes, et savoir le résultat que vous souhaitez à obtenir.

  6. #6
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Si c'est pour transformer des lignes en colonnes, tu peux utiliser qqchose comme ca :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    select   * 
    from     TEST;
     
            PK          I          J                                                
    ---------- ---------- ----------                                                
             1          1          2                                                
             1          2          3                                                
             1          3          4                                                
             2          1          2                                                
     
    select   pk, 
             decode(i, 1, j) i_1, 
             decode(i, 2, j) i_2, 
             decode(i, 3, j) i_3
    from     TEST;
     
            PK        I_1        I_2        I_3                                     
    ---------- ---------- ---------- ----------                                     
             1          2                                                           
             1                     3                                                
             1                                4                                     
             2          2                                                           
     
    -- oui mais on veut une ligne par clé primaire
    select   pk, 
             max(decode(i, 1, j)) i_1, 
             max(decode(i, 2, j)) i_2, 
             max(decode(i, 3, j)) i_3
    from     TEST
    group by pk;
     
            PK        I_1        I_2        I_3                                     
    ---------- ---------- ---------- ----------                                     
             1          2          3          4                                     
             2          2

    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    la question a été posé moult fois dans le forum SQL

  8. #8
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Citation Envoyé par orafrance
    la question a été posé moult fois dans le forum SQL
    Ca serait bien d'en faire une FAQ...

    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  9. #9
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    il y a déjà un article mais j'arrive pas à remettre la main dessus

    je crois que c'est là : http://sql.developpez.com/stockageopt/

  10. #10
    Nouveau membre du Club
    Inscrit en
    Novembre 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 49
    Points : 37
    Points
    37
    Par défaut
    Merci Laly pour l'exemple avec les decode. Il me manquait la petite astuce du MAX. Du coup, j'ai adapte ca à la vue et ca tourne a merveille. De plus avec une petite optimisation supplémentaire et je passe de plusieurs dizaine de minutes à 20 centième de secondes.

    En gros, le problème est que la personne qui a fait la vue, ne sachant pas comment mettre ses lignes en colonnes, a fait des fonctions perso qui sont appelees X fois. La requête était donc très lente, mais c'est réglée!


    Merci

  11. #11
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    De plus avec une petite optimisation supplémentaire
    Tu peux nous en dire plus sur la petite touche perso apportée ? Ca m'intéresse.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  12. #12
    Nouveau membre du Club
    Inscrit en
    Novembre 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 49
    Points : 37
    Points
    37
    Par défaut
    J'ai fait une premiere mouture de la vue en suivant ta methode avec des max(decode(... )) et ca prenait 18 à 40 secondes en éxécution. Ensuite, j'ai rajouté qq Hint (aide par un outils de tuning) dans la requête et je passe à 0.20 secondes. Les hint utilisé sont notamment:

    ORDERED INDEX
    USE_NL
    USE_HASH
    USE_HASH
    INDEX

    Ca fonctionne plutot bien. Faut voir en production maintenant!

    A noter que les outils de tuning ne fonctionne bien qu'en presence de relationnel pur. Lorsque la requete est remplie de fonctionne perso, on ne peut rien en sortir de positif!

  13. #13
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Intéressant, je regarderais, c'est quoi ton outil de tuning ?

    Est-ce-que les tables étaient correctement analysée ? Si oui, ton outil m'intéresse d'autant plus...


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  14. #14
    Nouveau membre du Club
    Inscrit en
    Novembre 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 49
    Points : 37
    Points
    37
    Par défaut
    les tables etaient correctement analyser. Je lance une analyse tous les soir a 100% sur presque tous les schema car on peut encore le faire

    Quand a l'outil de tuning que j'utilise, c'est celui de TOAD: SQL Tuning (on a une licence TOAD Expert Tuning) C graphique, ergonomique, gourmand en ressources mais ca aide bien! Y'a aussi pas mal de conseil de tuning et des explications de ce que l'on fait!

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

Discussions similaires

  1. [AC-97] Transformer des colonnes en lignes
    Par rogerfon dans le forum VBA Access
    Réponses: 3
    Dernier message: 11/07/2014, 12h17
  2. transformer des colonnes en ligne
    Par noolog dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 21/02/2013, 11h19
  3. Transformer des colonnes en lignes
    Par Heisenberg59 dans le forum Débutez
    Réponses: 4
    Dernier message: 01/10/2012, 18h03
  4. Transformer des colonnes en plusieurs lignes
    Par boubadia dans le forum Autres
    Réponses: 2
    Dernier message: 29/06/2012, 12h39
  5. Transformer des colonnes en lignes
    Par marman dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/11/2006, 17h43

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