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 en une seule


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Août 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Août 2020
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Regrouper plusieurs lignes en une seule
    Bonjour à tous,

    J'ai une BDD avec

    DATE NOM NUMERO
    10-08-2020 Pierre 10
    10-08-2020 Paul 12
    10-08-2020 Isabelle 14
    11-08-2020 Pierre 7
    11-08-2020 Paul 8
    11-08-2020 Isabelle 9
    12-08-2020 Pierre 1
    12-08-2020 Paul 2
    12-08-2020 Isabelle 3

    Je voudrai faire une requête qui renvoie cela :

    DATE PIERRE PAUL ISABELLE
    10-08-2020 10 12 14
    11-08-2020 7 8 9
    12-08-2020 1 2 3

    Est ce possible de faire cela facilement en SQL ?

    Merci d'avance pour vos lumières

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    C'est un pivot que tu souhaites faire. Par contre je ne comprends pas les résultats des valeurs pivotées. Pourquoi par exemple Paul et Isabelle ont des valeurs pour le 10-08-2020 alors qu'ils n'en ont que pour le 11-08-2020 et 12-08-2020 respectivement?

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Août 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Août 2020
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Pierre, Paul et Isabelle ont systématiquement une valeur tous les jours

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    Es tu sûr que tu ne t'es pas trompé dans ton tableau initial? Les 3 premières lignes sont toutes au 10/08, les 3 suivantes toutes au 11/08 et les 3 dernières au 12/08?

  5. #5
    Candidat au Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Août 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Août 2020
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Oui je suis sur. C'est justement mon problème,. Je veux fusionner les données pour n'avoir qu'une date par ligne. Pour cela, la valeur donnée par ligne doit être affectée au nom qui passerait en colonne.

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Oui j'ai bien compris, mais dans tes données de départ:

    DATE NOM NUMERO
    10-08-2020 Pierre 10
    11-08-2020 Paul 12
    12-08-2020 Isabelle 14
    10-08-2020 Pierre 7
    11-08-2020 Paul 8
    12-08-2020 Isabelle 9
    10-08-2020 Pierre 1
    11-08-2020 Paul 2
    12-08-2020 Isabelle 3

    Pierre n'a pas de numéro ni le 11/08 et ni le 12/08. Donc d'où sort pour Pierre la valeur 7 le 11/08 et la valeur 1 pour le 12/08 dans ton tableau de sortie? Ces valeurs sont au 10/08 pour Pierre. Comment décides tu de mettre 7 pour le 11/08 et 1 pour le 12/08, et pas l'inverse? Impossible à faire sans critères plus sélectifs.

  7. #7
    Candidat au Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Août 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Août 2020
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Il y avait une erreur effectivement dans le tableau ! (peut être dû à l'édition en tableau réalisé ou peut être dû aux données initiales).

    Bref, j'ai repris le message initial et le tableau devrait être bon.

    On a bien des données pour chaque date pour chacun des personnages. L'idée est de regrouper en une ligne chaque date avec la valeur de chaque personnage en colonne..

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Ok c'est plus logique. Si ta base de données le gère, tu peux utiliser la fonctionnalité PIVOT:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select *
    from t
    pivot (max(numero) for nom in ('Pierre' as PIERRE, 'Paul' as PAUL, 'Isabelle' as ISABELLE))
    order by 1;
    A noter qu'il faut connaitre les valeurs à pivoter, donc si tu as un nombre de personnages illimité, ça ne fonctionnera pas.

  9. #9
    Candidat au Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Août 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Août 2020
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Et non malheureusement, je n'ai pas accès à la fonction PIVOT…

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Dans ce cas tu peux faire un pivot à l'ancienne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select date,
           max(case when nom = 'Pierre' then numero end) as PIERRE,
           max(case when nom = 'Paul' then numero end) as PAUL,
           max(case when nom = 'Isabelle' then numero end) as ISABELLE
    from t
    group by date
    order by 1;

  11. #11
    Candidat au Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Août 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Août 2020
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Ca fonctionne parfaitement ! Merci !

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

Discussions similaires

  1. Regrouper plusieurs lignes en une seule
    Par timso dans le forum Informix
    Réponses: 6
    Dernier message: 12/07/2018, 15h10
  2. Regrouper plusieurs lignes dans une seule
    Par djinpark1 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/04/2013, 13h26
  3. [AC-2003] Regrouper plusieurs lignes en une seule
    Par DeFCrew dans le forum IHM
    Réponses: 2
    Dernier message: 20/12/2010, 16h19
  4. Regrouper plusieurs lignes en une seule
    Par Nicolerst dans le forum Développement
    Réponses: 2
    Dernier message: 18/08/2010, 10h50
  5. Regrouper plusieurs lignes sur une seule
    Par Mygush dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/09/2009, 11h05

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