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

Langage SQL Discussion :

Regrouper plusieurs lignes sur plusieurs colonnes


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2019
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Regrouper plusieurs lignes sur plusieurs colonnes
    Bonjour,

    Je cherche a faire une requête qui me paraissait banale, mais après recherche sur la documentation et le forum j'ai l'impression d'être le seul a vouloir la faire ...

    Voici le problème : j'ai une table avec les informations sur des évènements d'utilisateurs.
    Chaque information sur l'évènement est répartie en plusieurs entrées.
    Je voudrais regrouper les informations de chaque évènement sur une seule et même ligne, mais que chaque info soit une colonne à part entière (pas concaténer dans une string).

    Voici l'exemple de ma table :

    numEvent userEvent typeEvent typeValue valueEvent
    1 1 "Transfusion" "lot" 101010
    1 1 "Transfusion" "volume" 200
    1 1 "Transfusion" "prescripteur" "michel"
    2 1 "Transfusion" "lot" 20202020
    2 1 "Transfusion" "volume" 220
    2 1 "Transfusion" "prescripteur" "francois"

    Je voudrais que le résultat de sortie soit du type :
    userEvent typeEvent lot volume prescripteur
    1 Transfusion 101010 200 michel
    1 Transfusion 20202020 220 Francois


    J'ai vu les fonction group by mais qui ne permettent pas de garder les données de chaque ligne et la fonction de concaténation mais qui fusionne plusieurs info dans la même colonne ...

    J'ai l'impression que la réponse se trouve du coté des jointures mais je n'arrive pas à regrouper les différents évènements en une seule ligne.

    Les données recherchées sont fixes et connues (je sais que je recherche uniquement l'évènement qui s'appelle transfusion, et je connais les cases recherchées : lot, volume, prescripteur). Bien sur pour l'exemple j'ai mis des messages clairs pour qu'on se comprenne mais dans la base tout est représenté par des code de type int (sauf la valeur bien sur)

    Est-ce que quelqu'un aurait une piste ??

    merci de votre aide.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    C'est un cas classique de pivot qui peut se résoudre ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select  userEvent
        ,   typeEvent
        ,   max(case typeValue when 'lot'           then valueEvent end) as lot
        ,   sum(case typeValue when 'volume'        then valueEvent end) as volume
        ,   max(case typeValue when 'prescripteur'  then valueEvent end) as prescripteur
    from    maTable
    group by numEvent
        ,   userEvent
        ,   typeEvent
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Bonjour
    ça dépend du SGBD mais les mots clefs sont pivot, cross tab
    ex : https://fadace.developpez.com/mssql/pivot/
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  4. #4
    Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2019
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    merci pour vos réponses qui m'ont permis d'explorer de nouvelles pistes.

    J'ai réussi à réutiliser la fonction de al1_24 qui permet d'atteindre le bon résultat, merci !

    Par contre, je n'ai pas réussi a mettre en place la fonction pivot qui semble sacrément pratique car ne nécessite pas de nommer les différentes lignes, mais je n'ai pas réussi a utiliser la syntaxe. Il semble, qu'il soit obligatoire de l'utiliser avec une fonction d'agrégation ?
    Aussi, il me sort une erreur de syntaxe mais je ne comprend pas pourquoi ... mais quand je cherche dans l'aide mySQL 8 la fonction pivot il ne retrouve rien ?? Est-ce que cette version de SQL ne comprend pas la fonction PIVOT ?


    Merci

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 726
    Points
    52 726
    Billets dans le blog
    5
    Par défaut
    MySQL est très limité en sus d'être fortement bugué. Je ne crois pas que le PIVOT soit implémenté...
    https://codingsight.com/pivot-tables-in-mysql/
    A lire sur les limitations de MySQL :
    https://blog.developpez.com/sqlpro/p...oudre_aux_yeux

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. regroupement plusieurs colonnes en une
    Par rvm31 dans le forum Excel
    Réponses: 9
    Dernier message: 17/10/2017, 13h23
  2. Requête regroupant deux lignes sur une colonne
    Par majo59 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/08/2012, 10h05
  3. [XSL-FO] Mise en page ligne par ligne sur 2 colonnes.
    Par PouetteMan dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 26/12/2011, 18h14
  4. [XL-2007] Regrouper plusieurs colonnes en 1 seule
    Par mateo22 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/12/2010, 18h34
  5. selection d'une ligne sur 5 colonnes
    Par guyanais dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/09/2008, 16h12

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