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

Access Discussion :

Requete pour trier un état sur une somme partielle ?


Sujet :

Access

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Requete pour trier un état sur une somme partielle ?
    Bonjour à tous,

    Voici les tables mises en jeu:
    - tblCustomers(IDCust,NameCust)
    - tblEmployees(IDEmpl,NameEmpl)
    - tblProjects(IDProj,IDCust,IDEmpl,Duration)

    Ma requete:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT tblCustomers.NameCust, tblProjects.IDProj, tblProjects.Duration, tblEmployees.NameEmpl, Sum(tblProjects.Duration) AS SumOfDuration
    FROM (tblProjects INNER JOIN tblEmployees ON tblProjects.IDEmpl = tblEmployees.IDEmpl) INNER JOIN tblCustomers ON tblProjects.IDCust = tblCustomers.IDCust
    GROUP BY tblCustomers.NameCust, tblProjects.IDProj, tblProjects.Duration, tblEmployees.NameEmpl
    ORDER BY tblCustomers.NameCust;

    Ce que j'aimerai obtenir en executant ma requete:

    NameCust ------ IDProj - Duration ----- NameEmpl ------- ?????????
    CUST1 ---------- 1 ------ 3 ------------ EMPL3 ---------- 7
    CUST1 ---------- 2 ----- 10 ------------ EMPL4 --------- 10
    CUST1 ---------- 9 ------ 2 ------------ EMPL3 ---------- 7
    CUST1 --------- 11 ------ 2 ------------ EMPL3 ---------- 7
    CUST1 --------- 13 ------ 8 ------------ EMPL1 ---------- 9
    CUST1 --------- 18 ------ 1 ------------ EMPL1 ---------- 9
    CUST2 ---------- 3 ----- 20 ------------ EMPL1 --------- 20
    CUST2 ---------- 4 ----- 12 ------------ EMPL3 --------- 17
    CUST2 ---------- 5 ------ 3 ------------ EMPL2 ---------- 4
    CUST2 --------- 10 ------ 5 ------------ EMPL3 --------- 17
    CUST2 --------- 17 ------ 1 ------------ EMPL2 ---------- 4
    CUST3 ---------- 6 ----- 25 ------------ EMPL4 --------- 27
    CUST3 --------- 14 ------ 2 ------------ EMPL1 --------- 14
    CUST3 --------- 15 ------ 2 ------------ EMPL4 --------- 27
    CUST3 --------- 16 ----- 12 ------------ EMPL1 --------- 14
    CUST3 --------- 19 ------ 2 ------------ EMPL2 ---------- 2

    avec ???????? (fait manuellement) = la somme des durées (duration) d'un employé pour UN client

    Mais ce que j'obtiens c'est :

    NameCust ------ IDProj - Duration ----- NameEmpl ------- SumOfDuration
    CUST1 ---------- 1 ------ 3 ------------ EMPL3 ---------- 3
    CUST1 ---------- 2 ----- 10 ------------ EMPL4 --------- 10
    CUST1 ---------- 9 ------ 2 ------------ EMPL3 ---------- 2
    CUST1 --------- 11 ------ 2 ------------ EMPL3 ---------- 2
    CUST1 --------- 13 ------ 8 ------------ EMPL1 ---------- 8
    CUST1 --------- 18 ------ 1 ------------ EMPL1 ---------- 1
    CUST2 ---------- 3 ----- 20 ------------ EMPL1 --------- 20
    CUST2 ---------- 4 ----- 12 ------------ EMPL3 --------- 12
    CUST2 ---------- 5 ------ 3 ------------ EMPL2 ---------- 3
    CUST2 --------- 10 ------ 5 ------------ EMPL3 ---------- 5
    CUST2 --------- 17 ------ 1 ------------ EMPL2 ---------- 1
    CUST3 ---------- 6 ----- 25 ------------ EMPL4 --------- 25
    CUST3 --------- 14 ------ 2 ------------ EMPL1 ---------- 2
    CUST3 --------- 15 ------ 2 ------------ EMPL4 ---------- 2
    CUST3 --------- 16 ----- 12 ------------ EMPL1 --------- 12
    CUST3 --------- 19 ------ 2 ------------ EMPL2 ---------- 2

    Apparemment sum(duration), n'est pas la bonne la solution pour ce champ

    Note:
    Je joins db97.zip (db97.mdb) converti au format 97 au cas où quelqu'un voudrait bien me donner une solution concrete. Cette db ne contient que ces 3 tables avec la requete en question et .... un etat qui est le but final de cette requete. Cet état qui fonctionne déjà en utilisant un champs calculé, ne me permet pas à priori d'obtenir le tri souhaité, c'est à dire: afficher pour un client donné (customer), les employé triée selon la somme du temps passé (duration) chez ce client.

    Merci d'avance pour l'aide que vous pourrez apporter à un débutant !!!
    Thierry
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Bonjour et bienvenue ici,

    Merci de retirer "Besoin d'aide" de ton titre, c'est interdit et puis c'est un peu le cas de chacun des sujets du forum.

  3. #3
    Membre confirmé Avatar de timoth
    Homme Profil pro
    Responsable Outils Digitaux
    Inscrit en
    Octobre 2005
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable Outils Digitaux

    Informations forums :
    Inscription : Octobre 2005
    Messages : 479
    Points : 474
    Points
    474
    Par défaut
    Ca ne peut pas marcher en une seule requete...
    Comment veux tu calculer la somme des durées d'un employé pour UN client si tu les regroupe aussi par projet et par durée??

    je ne connais peut etre pas la solution parfaite, mais execute d'abord ta requete, simplifiée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT tblCustomers.NameCust, tblEmployees.NameEmpl, Sum(tblProjects.Duration) AS SumOfDuration
    FROM (tblProjects INNER JOIN tblEmployees ON tblProjects.IDEmpl = tblEmployees.IDEmpl) INNER JOIN tblCustomers ON tblProjects.IDCust = tblCustomers.IDCust
    GROUP BY tblCustomers.NameCust, tblEmployees.NameEmpl
    ORDER BY tblCustomers.NameCust;
    Ainsi tu as ta bonne somme. Fais la écrire dans une table intermédiaire "temp"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT tblCustomers.NameCust, tblEmployees.NameEmpl, Sum(tblProjects.Duration) AS SumOfDuration INTO temp
    FROM 'etc...
    Et puis, voila, tu réutilises cette table pour une nouvelle requete ou tu fais correspondre tes champs pour arriver au résultat voulu.
    Pour executer les deux requetes a la suite (ou les trois si tu supprimes la table temp apres), tu mets ca dans une macro...

    Bon courage

  4. #4
    Candidat au Club
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par timoth
    Ca ne peut pas marcher en une seule requete...
    Comment veux tu calculer la somme des durées d'un employé pour UN client si tu les regroupe aussi par projet et par durée??

    je ne connais peut etre pas la solution parfaite, mais execute d'abord ta requete, simplifiée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT tblCustomers.NameCust, tblEmployees.NameEmpl, Sum(tblProjects.Duration) AS SumOfDuration
    FROM (tblProjects INNER JOIN tblEmployees ON tblProjects.IDEmpl = tblEmployees.IDEmpl) INNER JOIN tblCustomers ON tblProjects.IDCust = tblCustomers.IDCust
    GROUP BY tblCustomers.NameCust, tblEmployees.NameEmpl
    ORDER BY tblCustomers.NameCust;
    Ainsi tu as ta bonne somme. Fais la écrire dans une table intermédiaire "temp"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT tblCustomers.NameCust, tblEmployees.NameEmpl, Sum(tblProjects.Duration) AS SumOfDuration INTO temp
    FROM 'etc...
    Et puis, voila, tu réutilises cette table pour une nouvelle requete ou tu fais correspondre tes champs pour arriver au résultat voulu.
    Pour executer les deux requetes a la suite (ou les trois si tu supprimes la table temp apres), tu mets ca dans une macro...

    Bon courage
    Merci beaucoup timoth,
    Effectivement en utilisant une requete intermediaire, j'ai pu arriver à mes fins (pas besoin de table intermediaire)
    Au cas où d'autres seraient intéressé par la solution, je joins le fichier mdb avec la solution finale !!!
    Bonne journée :-)
    Thierry
    Fichiers attachés Fichiers attachés

  5. #5
    Candidat au Club
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par cafeine
    Bonjour et bienvenue ici,

    Merci de retirer "Besoin d'aide" de ton titre, c'est interdit et puis c'est un peu le cas de chacun des sujets du forum.
    Bonjour cafeine,
    Voilà, c'est fait !!! le titre est modifié !!
    Désolé, je ne recommencerai plus ;-)
    Bonne journée
    Thierry

  6. #6
    Membre confirmé Avatar de timoth
    Homme Profil pro
    Responsable Outils Digitaux
    Inscrit en
    Octobre 2005
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable Outils Digitaux

    Informations forums :
    Inscription : Octobre 2005
    Messages : 479
    Points : 474
    Points
    474
    Par défaut
    N'oublie pas le tag "Resolu", ca permet aux autres de savoir qu'au moins on a fait aujourd'hui le bonheur de qq1...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/11/2012, 20h29
  2. Réponses: 0
    Dernier message: 05/11/2012, 20h48
  3. [WD17] Trier un état sur une rubrique de type "DateHeure"
    Par Qodix dans le forum WinDev
    Réponses: 3
    Dernier message: 24/10/2012, 11h33
  4. Réponses: 3
    Dernier message: 06/12/2011, 20h56
  5. Conseils pour gestion de ressources sur une requete
    Par joboy84 dans le forum Langage
    Réponses: 3
    Dernier message: 30/05/2009, 01h37

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