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 lignes


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 105
    Points : 40
    Points
    40
    Par défaut Afficher les colonnes en lignes
    Bonjour,

    J'ai pas mal cherché sur les forums mais ne suis pas arrivé à résoudre mon problème.

    J'ai une table comme celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CLIENT    EMPLOYEUR
    C1                TOTO        
    C1                ZAZA 
    C2                PRIVE
    C1               AZERTY
    C2               LECINE
    C3                  ....
    ...                   ....
    Je souhaite obtenir en résultat les X derniers employeurs en ligne, par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CLIENT    EMPLOYEUR1    EMPLOYEUR2     EMPLOYEUR3
    C1                TOTO                   ZAZA                 AZERTY
    C2                 PRIVE                 LECINE
    C3                 ...
    Le nom de l'employeur étant variable, je ne peux pas utiliser le case. Savez-vous comment faire ?

    Merci,

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 111
    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 111
    Points : 28 459
    Points
    28 459
    Par défaut
    Il s'agit là d'un PIVOT, opération qui n'est pas prévue dans le langage SQL standard et non prise en charge par Oracle.
    Comme il n'est pas possible de connaître à l'avance le nombre de colonnes, il est plus correct de demander à l'application de prendre en charge cette mise en forme du résultat de la requête.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 105
    Points : 40
    Points
    40
    Par défaut
    Je suis désolé, je n'ai pas été suffisamment précis dans l’énoncé du problème. Il est possible de connaître le nombre de colonnes car je souhaite prendre les X derniers employeurs.

    A terme cette requête sera exécutée sur un serveur 11G, mais pour le moment elle doit tourner sur une 10G. Je ne suis pas contre un PL/SQL mais je ne le maîtrise pas encore suffisamment.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 111
    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 111
    Points : 28 459
    Points
    28 459
    Par défaut
    En connaissant le nombre maximal, on peut faire quelque chose.
    En supposant qu'on a une colonne ORDRE qui précise l'ordre antéchronologique de l'employeur :
    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
    SELECT  tb1.client
        ,   MAX(tb1.employeur)  AS employeur1
        ,   MAX(tb2.employeur)  AS employeur2
        ,   MAX(tb3.employeur)  AS employeur3
    FROM    matable tb1
        LEFT JOIN
            matable tb2
            ON  tb2.client = tb1.client
            AND tb2.ordre  = 2
        LEFT JOIN
            matable tb3
            ON  tb3.client = tb1.client
            AND tb3.ordre  = 3
    WHERE   tb1.ordre  = 1
    GROUP BY tb1.client

  5. #5
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Si ce qui vous importe est d'avoir vos résultats par ligne, sans que les colonnes aient de l'importance, vous pouvez essayer ce genre de chose


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT client,
           LTRIM(MAX(SYS_CONNECT_BY_PATH(employeur,','))
           KEEP (DENSE_RANK LAST ORDER BY Courant),',') AS ListeEmployeur
    FROM   (SELECT client,
                   employeur,
                   ROW_NUMBER() OVER (PARTITION BY client ORDER BY employeur) AS Courant,
                   ROW_NUMBER() OVER (PARTITION BY client ORDER BY employeur) -1 AS Precedent
            FROM   MaTable)
    GROUP BY client
    CONNECT BY Precedent = PRIOR Courant AND client= PRIOR client
    START WITH Courant = 1;
    mais ca ne répond pas exactement a votre demande initiale

Discussions similaires

  1. Afficher les colonnes en ligne
    Par shaun_the_sheep dans le forum SQL
    Réponses: 9
    Dernier message: 26/04/2018, 14h29
  2. Réponses: 4
    Dernier message: 12/08/2013, 17h59
  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