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

Requêtes et SQL. Discussion :

requete avec regroupement multi tables


Sujet :

Requêtes et SQL.

  1. #1
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    Par défaut requete avec regroupement multi tables
    Bonjour,

    J'ai trois tables
    Client : numclient, nom
    CA04 : numclient, chiffre04
    ca05 : numclient, chiffre05

    Quand je fais la requète sur une seule année cela marche très bien, j'obtiens biens par la client la somme de ses chiffres pour l'année 04 OU l'année 05.
    par contre je voudrais que ma requète me donne 04 ET 05 soit

    numclient, nom, somme(chiffre04), somme(chiffre05)

    J'ai essayé la requète suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Client.NumClient, Client.Nom, Sum([CA 04].[chiffre 04] AS [Somme 04], Sum([CA 05].[chiffre 05] AS [Somme 05] 
    FROM [Client],[CA 04],[CA 05] 
    GROUP BY [Client].NumClient, [Client].Nom 
    HAVING [CA 05].NumClient = [Client].NumClient 
    AND [CA 05].NumClient = [Client].NumClient 
    ORDER BY [Client].NumClient;

    Et.....cela me donne des résultats faux il mélange bizarement les données 04 et 05.

    Un début de solution ? si vous avez pu comprendre mes explications

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour,

    A mon avis, il faut faire les liens entre tables "JOIN".
    Essaie de faire d'abord ta requête manuellement avec l'outil requête, puis quand ça marche, recopie le SQL.

    Bon courage,

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  3. #3
    Membre confirmé Avatar de milia
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2006
    Messages : 481
    Points : 532
    Points
    532
    Par défaut
    Il faudrait peut-être mettre ce qu'il y a dans le Having dans le where:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT Client.NumClient, Client.Nom, Sum([CA 04].[chiffre 04] AS [Somme 04], Sum([CA 05].[chiffre 05] AS [Somme 05] 
    FROM [Client],[CA 04],[CA 05]
    WHERE [CA 05].NumClient = [Client].NumClient 
    AND [CA 05].NumClient = [Client].NumClient 
    GROUP BY [Client].NumClient, [Client].Nom 
    ORDER BY [Client].NumClient;
    car quand tu as n tables dans le where, il faut n-1 jointures dans le where.

    Bonne chance

  4. #4
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    Par défaut
    Je viens d'essayer ta requète (merci de la rapidité), malheureusement cela ne fonctionne pas.

    Il ne me donne que les clients présents dans 04 ET dans 05 avec des resultats faux.

    Table Client
    1 A
    2 B
    3 C
    4 D
    5 E

    Table Chiffre04
    A 1
    A 1
    B 2
    D 4
    B 2
    D 4
    D 4

    Table Chiffre05

    A 1
    A 1
    E 5
    D 4
    E 5

    et j'obtiens
    Numclient Somme05 somme04
    A 4 4
    D 12 12

    et je craque..

    A

  5. #5
    Membre confirmé Avatar de milia
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2006
    Messages : 481
    Points : 532
    Points
    532
    Par défaut
    J'ai pas fait attention tout à l'heure mais tu as mis deux fois la meme chose et moi j'ai recopié sans regarder bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    
    SELECT Client.NumClient, Client.Nom, Sum([CA 04].[chiffre 04] AS [Somme 04], Sum([CA 05].[chiffre 05] AS [Somme 05] 
    FROM [Client],[CA 04],[CA 05]
    WHERE [CA 05].NumClient = [Client].NumClient 
    AND [CA 04].NumClient = [Client].NumClient 
    GROUP BY [Client].NumClient, [Client].Nom 
    ORDER BY [Client].NumClient;

  6. #6
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    Par défaut
    J'avais bien corrigé la faute de frappe.

  7. #7
    Membre confirmé Avatar de milia
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2006
    Messages : 481
    Points : 532
    Points
    532
    Par défaut
    Je sais pas si c'est dû à cela mais tu as aussi oublié les parenthèses pour les sum! et pas la peine de mettre "as [somme04]" et l'autre je pense!

  8. #8
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    Par défaut
    Cela ne change rien.

    Excuse pour les différentes fautes de frappe mais access est sur mon portable et internet sur le fixe et au bureau on ne peut pas brancher son portable sur le réseau donc....pouir aller plus vite et éviter les manip c'est copier/coller à la main d'où les quelque oublis dans le code.

    Tu as pu essayer avec les exemples ?

  9. #9
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Tu as lu mon message, le n°2?

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  10. #10
    Membre confirmé Avatar de milia
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2006
    Messages : 481
    Points : 532
    Points
    532
    Par défaut
    Je trouve comme toi, et j'ai fait de la méthode de pgz et je trouve pareil (à part si je l'ai mal faite).

  11. #11
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    Par défaut
    Oui j'avais bien lu ton message.

    J'ai effectivement commencé avec l'outil création en JOINGnant Mes NumClient entre eux Client.numClient --> Chiffre 04.numclient et Client.numClient --> Chiffre 05.numclient

    Résultat idem.
    J'ai donc posté sur le forum, mais directement la requête obtenue pour plus de lisibilité pour vous.

  12. #12
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    J'ai effectivement commencé avec l'outil création en JOINGnant Mes NumClient entre eux Client.numClient --> Chiffre 04.numclient et Client.numClient --> Chiffre 05.numclient

    Résultat idem.
    Alors là, je regarde.

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  13. #13
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Re,

    Voici une requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT tblClient.NumClient, tblClient.NomClient, Nz(DSum("Chiffre04","tblCA04","NumClient =" & [NumClient]),0) AS C04, Nz(DSum("Chiffre05","tblCA05","NumClient =" & [NumClient]),0) AS C05
    FROM tblClient;
    et son résultat, avec tes chiffres
    NumClient NomClient C04 C05
    1 A 2 2
    2 B 4 0
    3 C 0 0
    4 D 12 4
    5 E 0 10
    Ca ressemble à ce que tu attends?

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  14. #14
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    Par défaut
    Oui les résultats sont bons.

    Par contre je n'ai pas compris la requête. Tu peux me donner un peu plus d'explications ?

    Mais je ne veux pas abuser.

  15. #15
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Quelques explications rapides. Tu veux le Chiffre d'affaire par client, donc tu commences par faire une sélection simple sur la table des clients, sans t'occuper des tables CA( c'est ça qui fout la zone!). Bon à ce stade tu as une ligne par client (c'est déjà pas mal) mais pas de CA!
    Alors tu ajoutes 2 champs calculés CA04 et CA05 dans ton cas. Pour calculer la valeur de CA04 sur chaque ligne, il suffit d'additionner les chiffres de CA04 des enregistrements qui concernent le client de la ligne. C'est ce que fait le DSum. Sans oublier le Nz pour remplacer les valeurs NULL par des 0. Simple, non?
    Même chose bien sûr pour CA05.

    Voilà. c'est clair?

    Cordialement,

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  16. #16
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    Par défaut
    Citation Envoyé par pgz
    Quelques explications rapides. Tu veux le Chiffre d'affaire par client, donc tu commences par faire une sélection simple sur la table des clients, sans t'occuper des tables CA( c'est ça qui fout la zone!). Bon à ce stade tu as une ligne par client (c'est déjà pas mal) mais pas de CA!
    Alors tu ajoutes 2 champs calculés CA04 et CA05 dans ton cas. Pour calculer la valeur de CA04 sur chaque ligne, il suffit d'additionner les chiffres de CA04 des enregistrements qui concernent le client de la ligne. C'est ce que fait le DSum. Sans oublier le Nz pour remplacer les valeurs NULL par des 0. Simple, non?
    Même chose bien sûr pour CA05.

    Voilà. c'est clair?

    Cordialement,

    pgz
    Oui j'ai compris

    Par contre j'obtiens des #erreur dans CA04 et CA05

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ListeClients.NumClient,ListeClients.NomClient,
    NZ(DSUM("Chiffre04","CA04","NumClient="&[NumClient]),0) AS CA04
    FROM ListeClients
    Ce doit pas ^étre grand chose mais je passe à côté.

    je fais bien la somme du champ Chiffre04 de la table CA04. Je pense que je M.... sur la condition

  17. #17
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Comment as-tu renseigné les tables CA04 et CA05 avec le num ou avec le nom du client?

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  18. #18
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    Par défaut
    Pour la table CA04 (idem CA05)
    Champs NumClient: A, B, C, D, E, ....
    Champs Chiffre04 : numérique

  19. #19
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Champs NumClient: A, B, C, D, E, ....
    Ca ne ressemble pas à des numériques, ça? Tu as enregistré les noms plutôt que les IdClients? Ce ne serait pas une bonne idée.
    Il vaudrait mieux que tu changes cela.

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  20. #20
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    Par défaut
    Oui et non (et je ne suis pas normand)

    En fait, la table client contient Numclient et Nom

    Par exemple
    A TOTO
    B PIERRE
    ...

    et la table CA04
    A 25
    B 50
    A 10
    D 5 .....

    A ma décharge, je reprends la chose et je ne suis pas à l'origine de la création des tables.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. update d'un champ avec select multi-table
    Par maxvador dans le forum Hibernate
    Réponses: 1
    Dernier message: 23/09/2009, 11h54
  2. requete avec regroupement d'une table
    Par pierre_b_77 dans le forum Requêtes
    Réponses: 4
    Dernier message: 07/07/2009, 19h52
  3. Requete avec regroupement par mois.. ou pas ?
    Par flamby6969 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 19/06/2008, 12h43
  4. Requete de regroupement de tables
    Par efk pharos dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 13/12/2007, 04h51
  5. Somme dans une requete avec regroupement
    Par louroulou dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 19/07/2006, 21h20

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