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 :

Selection et regroupement


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Par défaut Selection et regroupement
    Bonjour

    Je souhaiterai effectuer, sur les deux tables suivantes, une requête de sélection de l'ensemble des enfants de la base associé à un tri afin de les regrouper par fratrie.



    Par exemple si ma table enfant contient les occurences suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    enf_nom     enf_prenom       enf_dateNaissance
    --------     -----------       ------------------
    DUPOND     MARTIN             01/01/2001
    DUPOND     TRYPHON           01/01/1999
    MARIE        MARCEL            01/01/2008
    LECOUE      ALFRED             01/01/2007
    Ma table Avoir freres contient les occurences.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    enf_nom   enf_prenom   enf_dateNaissance   fre_nom   fre_prenom   fre_dateNaissance
    --------  ---------    -----------------   --------  -----------   -----------------
    DUPOND    MARTIN       01/01/2001          DUPOND     TRYPHON     01/01/1999
    DUPOND    TRYPHON      01/01/1999          DUPOND     MARTIN      01/01/2001
     
    MARIE      MARCEL       01/01/2008          LECOUE    ALFRED       01/01/2007
    LECOUE     ALFRED       01/01/2007          MARIE     MARCEL       01/01/2008
    Je souhaite que ma requête me donne le résultat suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    enf_nom     enf_prenom       enf_dateNaissance
    --------     -----------       ------------------
    
    DUPOND     MARTIN             01/01/2001
    DUPOND     TRYPHON           01/01/1999
    
    
    LECOUE      ALFRED             01/01/2007
    MARIE        MARCEL            01/01/2008
    
    Je n'ai aucune idée de comment faire ce regroupement avec du SQL

    Je ne cherche pas à ce qu'on me donne le résultat tout fait mais j'aimerais bien qu'on me donne des indices.

    Merci d'avance de votre aide

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonjour,

    La notion de regroupement se fait par le "GROUP BY".

    Bonne continuation
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Par défaut
    Citation Envoyé par Chtulus Voir le message
    Bonjour,

    La notion de regroupement se fait par le "GROUP BY".

    Bonne continuation
    Tout d'abord merci de ton aide.

    D'après ce que j'ai compris le GROUP BY permet de faire un regroupement sur un champ? Or la je ne veux pas "fusionner" plusieurs lignes mais je veux les classer par groupe.

    On serait plus dans le domaine du ORDER BY mais malheureusement les Enfants d'une même famille n'ont pas toujours le même nom. Le ORDER BY que je veux faire se fait sur la liaison entre ma table Enfant et AvoirFrere.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Salut,

    Peut on savoir sur quel environnement tu travailles?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Par défaut
    Citation Envoyé par Snipah Voir le message
    Salut,

    Peut on savoir sur quel environnement tu travailles?
    J'utilise ACCESS 2003.

  6. #6
    Scorpi0
    Invité(e)
    Par défaut
    Quelques conseils en rouge :

    Citation Envoyé par Anonymouse Voir le message
    Bonjour

    Je souhaiterai effectuer, sur les deux tables suivantes, une requête de sélection de l'ensemble des enfants de la base associé à un tri afin de les regrouper par fratrie.



    Par exemple si ma table enfant contient les occurences suivantes:

    Un identifiant serait plus propre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    enf_id     enf_nom     enf_prenom       enf_dateNaissance
    --------  --------     -----------       ------------------
    1            DUPOND     MARTIN             01/01/2001
    2            DUPOND     TRYPHON           01/01/1999
    3            MARIE        MARCEL            01/01/2008
    4            LECOUE      ALFRED             01/01/2007
    Ma table Avoir freres contient les occurences.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    enf1_id            enf2_id
    --------  ---------
    1            2
    3            4
    Avec les identifiants, c'est nettement mieux. De plus, la relation frère est jusqu'à preuve du contraire réciproque, pas besoin de doubler tes occurences

    Je souhaite que ma requête me donne le résultat suivant:

    Ici, il te faut une colonne pour distinguer tes groupes (c'est pas avec une couleur de forum que ça va se faire !!)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    groupe_id     enf_nom     enf_prenom       enf_dateNaissance
    ---------     --------     -----------       ------------------
     
    1                 DUPOND     MARTIN             01/01/2001
    1                 DUPOND     TRYPHON           01/01/1999
    2                 LECOUE      ALFRED             01/01/2007
    2                 MARIE        MARCEL            01/01/2008
    Je n'ai aucune idée de comment faire ce regroupement avec du SQL

    Je ne cherche pas à ce qu'on me donne le résultat tout fait mais j'aimerais bien qu'on me donne des indices.

    Merci d'avance de votre aide
    Voila, revoit un peu ta conception, ça devrait te faciliter la vie

    Edit : en fait, ta table groupe devrait même se substituer a ta table Avoir freres.
    Tu devrait avoir une table famille par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    id_family          id_fils_membre
    ---------         -----------
    1                    1
    1                    2
    2                    3
    2                    4
    Et au final, ta requête est une jointure entre 'famille' et 'enfant'.
    La table 'Avoir frere' saute, mais tu peux faire une requete simple te permettant de la retrouver.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Par défaut
    Citation Envoyé par Scorpi0 Voir le message
    Quelques conseils en rouge :



    Voila, revoit un peu ta conception, ça devrait te faciliter la vie

    Edit : en fait, ta table groupe devrait même se substituer a ta table Avoir freres.
    Tu devrait avoir une table famille par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    id_family          id_fils_membre
    ---------         -----------
    1                    1
    1                    2
    2                    3
    2                    4
    Et au final, ta requête est une jointure entre 'famille' et 'enfant'.
    La table 'Avoir frere' saute, mais tu peux faire une requete simple te permettant de la retrouver.
    C'est parfait, le seul problème est que la base de données sur laquelle je travaille est déja créée et le code est déja pondu donc sauf à tout modifier :S il faut que je garde les tables telles quelles.

    Merci de ton aide

  8. #8
    Scorpi0
    Invité(e)
    Par défaut
    Argh, la table avoir_frere est vraiment couler dans le béton ?
    Vraiment vraiment vraiment ?
    Pas moyen de la modifier ? Parce ce que c'est quand même ignoblement laid, tu ne peux pas modifier la table enfant sans penser à modifier la table avoir_frere sur les mêmes occurrences.. (Tu va me dire, on change pas tout les jours de date de naissance, mais quand même...)
    Ça va être coton à te sortir la requête qui convient !

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Par défaut
    Citation Envoyé par Scorpi0 Voir le message
    Argh, la table avoir_frere est vraiment couler dans le béton ?
    Vraiment vraiment vraiment ?
    Pas moyen de la modifier ? Parce ce que c'est quand même ignoblement laid, tu ne peux pas modifier la table enfant sans penser à modifier la table avoir_frere sur les mêmes occurrences.. (Tu va me dire, on change pas tout les jours de date de naissance, mais quand même...)
    Ça va être coton à te sortir la requête qui convient !
    Nan je peux pas changer mais te prend pas la tête, je posais la question pour voir si quelqu'un n'avait pas une recette magique pour faire le travail simplement et rapidement .

    Mais comme ça n'a pas l'air d'être le cas je me débrouillerai pour faire autrement avec du code VBA.

    Merci de ton aide

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Oui, à part avec du code, je vois mal comment faire.
    J'ai cherché un moment sans trouver. Ceci dit ça doit être faisable, je suis pas un champion

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

Discussions similaires

  1. [Toutes versions] Requête SELECT et regroupement
    Par damsmut dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 14/06/2012, 11h30
  2. Select et regroupement de valeurs
    Par the java lover dans le forum SQL
    Réponses: 3
    Dernier message: 30/07/2008, 22h47
  3. Réponses: 8
    Dernier message: 09/07/2008, 14h09
  4. [Oracle] regroupement de deux select dans un meme select
    Par santana2006 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 06/09/2006, 11h41
  5. Select et regroupements
    Par dudux dans le forum Bases de données
    Réponses: 16
    Dernier message: 17/07/2004, 20h18

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