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 :

Afficher les colonnes en ligne


Sujet :

SQL Oracle

  1. #1
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut Afficher les colonnes en ligne
    Bonjour,

    J'ai construit une requête SQL qui me renvoie par ligne , une date , un nom de participant , un indicateur de type numérique présent le matin , un indicateur de type numérique présent l'après midi.

    Exemple : 25/10/2011 TOTO 1 0 , pour dire toto présent le matin du 25/10/2011

    Par jour je n'ai pas forcément les mêmes participants , soit le 26/10/201 j'ai TITI présent l'après midi.

    Je dois à présent représenter cela sous forme de table , par ligne l'ensemble des mes participants et par colonne mes jours

    Exemple :
    PARTICIPANT | DATE 1 - MATIN | DATE 1 APMIDI |DATE 2 - MATIN | DATE 2 APMIDI
    
    TOTO                X                                       
    TITI                                                                                            X
    Pour précision je suis en version 10G d'oracle.

    j'ai trouvé cela , et appliqué , seulement tout est dans la même colonne...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    COLUMN employees FORMAT A50
     
    SELECT deptno, wm_concat(ename) AS employees
    FROM   emp
    GROUP BY deptno;
     
        DEPTNO EMPLOYEES
    ---------- --------------------------------------------------
            10 CLARK,KING,MILLER
            20 SMITH,FORD,ADAMS,SCOTT,JONES
            30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD
     
    3 rows selected.
    Est-ce que quelqu'un a une idée sur la façon de procéder ?

  2. #2
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Bonjour,

    Je me suis déjà heurté à ce problème et me suis inspiré de cet article :

    http://www.orafaq.com/node/1871

    Cdlt,
    LBO72.

  3. #3
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Avant 9i (et après aussi mais c'est du spécifique Oracle) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select ename ,
           decode( deptno, 10, 'X', null )  dept_10,
           decode( deptno, 20, 'X', null )  dept_20,
           decode( deptno, 30, 'X', null )  dept_30,
           decode( deptno, 40, 'X', null )  dept_40
    from emp ;
    A partir de la 9i

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select ename ,
           case when deptno = 10 then 'X' else null end  dept_10,
           case when deptno = 20 then 'X' else null end  dept_20,
           case when deptno = 30 then 'X' else null end  dept_30,
           case when deptno = 40 then 'X' else null end  dept_40
    from emp ;

  4. #4
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Bonsoir,

    j'ai laissé tombé et j'ai revu ma copie , impossible de trouver quelque chose via SQL d'assez dynamique pour satisfaire mon besoin

  5. #5
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    c'est génial la fonction wm_concat que tu as découvert.
    "shaun_the_sheep"
    auparavant j'utilisais la génération du XML puis extraction pour que je transpose des lignes en une colonne. cette dernière est gourmande en termes de mémoire et de temps.

  6. #6
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 998
    Points : 2 501
    Points
    2 501
    Par défaut
    Ce sujet a eu un sacré succès : "Affichages: 2 095" au 25/04 à 10h00

  7. #7
    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 388
    Points
    18 388
    Par défaut
    C'est un sujet ouvert il y a sept ans.

    Attention à tous, la fonction wm_concat n'est pas officiellement supportée par Oracle, vous ne la trouverez pas dans la documentation.
    Si vous avez un incident de prod en utilisant cette fonction, le support Oracle pourra se cacher derrière le fait que vous n'êtes pas censé l'utiliser.

    De plus, à partir de la version 11gR2, la fonction listagg fait le même travail et c'est une fonction documentée :
    https://docs.oracle.com/cloud/latest...htm#SQLRF30030

  8. #8
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 998
    Points : 2 501
    Points
    2 501
    Par défaut
    OK, je comprends mieux
    Et effectivement je ne voyais pas l'avantage par rapport à LISTAGG; je comprends maintenant pourquoi.

  9. #9
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    2 Choses :
    LISTAGG retourne un VARCHAR2 de 2000 max.. Si la concaténation dépasse les 2000 car, erreur ORA-01489: result of string concatenation is too long (et inutile de faire un SUBSTR sur la fonction.. c'est à l'intérieur de la fonction que ça plante)
    WM_CONCAT retourne un CLOB (pas de limite donc ou alors très très élevée )

    En 12.2 je n'ai plus de fonction WMSYS.WM_CONCAT, vous confirmez ?

  10. #10
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Bonjour

    Effectivement c'est pas récent.
    J'ai pas appliqué cette méthode je me suis orienté sur la construction d'un pivot

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/08/2013, 17h59
  2. Afficher les colonnes en lignes
    Par villegente dans le forum SQL
    Réponses: 4
    Dernier message: 23/08/2011, 15h03
  3. Requête SQL : Afficher les colonnes en ligne, et vice versa
    Par paflolo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 17/03/2009, 09h16
  4. Réponses: 2
    Dernier message: 13/06/2006, 15h45
  5. [debutant] afficher les numéros de lignes
    Par ameliepim dans le forum MFC
    Réponses: 4
    Dernier message: 07/06/2006, 10h22

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