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 :

requête de groupage


Sujet :

Langage SQL

  1. #1
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 694
    Points : 953
    Points
    953
    Par défaut requête de groupage
    Bonjour a tous

    voici un apercu des tables de mon analyse :

    Adherents(idadherents)
    projet (idprojet)
    cotisation (idcotisation, idadherent, idprojet ,montantpaye)

    ma requête est la suivante :

    je voudrais pour tous les adherents le montant total des cotisations payées
    jusqu'a un numero(idprojet) donné.

    exemple du projet idprojet = 1 au idprojet = 3 on aura

    idadherents --------TotalMontantPaye

    1-------------------2000
    2-------------------3000
    3--------------------0
    etc....

    Etant entendu que certains ne sont pas a jour de leur cotisation !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT AD.idAdherent, SUM(CO.montantpaye) AS TotalMontantPaye
    FROM Adherents AD
    INNER JOIN Cotisations CO ON CO.idAdherent=AD.idAdherent
    WHERE CO.idProjet BETWEEN 1 AND 3
    GROUP BY AD.idAdherent
    mais apparemment ça ne me convient pas car dans la liste total les adhérents sont 600, et cette requête me ramène 511.
    or je devrait avoir 600 adhérents, on dirait que ceux qui n'ont pas cotisés ont été exclu
    comment faire pour les faire apparaître dans ma liste !

    merci a tous

  2. #2
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Les adhérents qui n'ont pas cotisés n'ont pas d'enregistrement dans la table Cotisation. Il ne faut donc pas faire une jointure entière mais seulement une jointure à gauche (ou à droite )...

  3. #3
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 694
    Points : 953
    Points
    953
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT AD.idAdherent, SUM(CO.montantpaye) AS TotalMontantPaye
    FROM Adherents AD
    LEFT JOIN Cotisations CO ON CO.idAdherent=AD.idAdherent
    WHERE CO.idProjet BETWEEN 1 AND 3
    GROUP BY AD.idAdherent
     
    SELECT AD.idAdherent, SUM(CO.montantpaye) AS TotalMontantPaye
    FROM Adherents AD
    RIGTH JOIN Cotisations CO ON CO.idAdherent=AD.idAdherent
    WHERE CO.idProjet BETWEEN 1 AND 3
    GROUP BY AD.idAdherent
    avec ces 2 codes j'ai le même resultats ou bien j'ai mal compris

  4. #4
    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 386
    Points
    18 386
    Par défaut
    Il y a quelques subtilités avec les jointures externes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT
        AD.idAdherent,
        SUM(COALESCE(CO.montantpaye, 0)) AS TotalMontantPaye
    FROM
        Adherents AD
        LEFT OUTER JOIN Cotisations CO
          ON CO.idAdherent = AD.idAdherent
         AND CO.idProjet BETWEEN 1 AND 3
    GROUP BY
        AD.idAdherent;

  5. #5
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 694
    Points : 953
    Points
    953
    Par défaut
    je viens de tester apparement j'ai la totalité de mes adhérents avec certains qui ont pour montant 0
    j'ai donc des inquiétudes concernant la requête !

    1 quel est le role de cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUM(COALESCE(CO.montantpaye, 0)) AS TotalMontantPaye
    et surtout de la fonction COALESCE(CO.montantpaye, 0)?

    2 ceux dont les montants sont a 0 sont bien ceux qui rien cotisé ?

    Merci

  6. #6
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 694
    Points : 953
    Points
    953
    Par défaut
    Je pense que c'est bon !
    Merci a tous

  7. #7
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    La fonction COALESCENCE donne la valeur donnée en deuxième argument si l'expression en premier argument est null.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/09/2009, 17h14
  2. Requête de groupage
    Par devalender dans le forum SQL
    Réponses: 9
    Dernier message: 13/08/2009, 19h07
  3. Requête de groupage
    Par devalender dans le forum SQL
    Réponses: 4
    Dernier message: 11/01/2009, 13h20
  4. [MSDE] Problème de groupage sur une requête
    Par joefou dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/11/2006, 09h43
  5. requête de groupage
    Par devalender dans le forum SQL
    Réponses: 5
    Dernier message: 16/05/2006, 14h50

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