Probleme sur requete qui me rend dingue !

Signaler
Messages postés
3
Date d'inscription
jeudi 18 août 2011
Statut
Membre
Dernière intervention
13 juin 2012
-
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
-
Bonjour a tous,

j'ai petit probleme sur une requette, je m'explique.

j'ai une table (Table1)qui contient deux colonnes:
-Week
-NbColis

et une autre (Table2) qui contient:
-Week
-Heures

et je veux une requette qui comporte:
-Week
-NbColis
_Heures


j'ai lié les deux table sur Week
je regroupe (Week) et fait un "SUM" sur les deux autre colonne.


si par exemple pour la Table1, la semaine 19 j'ai une ligne contenant:
Week |NbColis
19 |10

et pour la Table2
Week | Heures
19 | 5

pas de probleme la requette donne

Week |NbColis |Heures
19 | 10 | 5

mais si dans la Table2 je rentre:
Week |Heures
19 | 2,5
19 | 2,5

J'ai ce resultat:
Week |NbColis |Heures
19 | 20 | 5

c'est comme si, comme dans la Table2 il y as deux lignes, la Table1 et doublé !
si je mais 3 ligne sur la Tble2 le nombre de colis sera triplé ect.....

je ne comprent vraiment pas comment j'arrive pas a faire un truc aussi simple !!!!

merci par avance pour votre aide....car je si bloqué !

7 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
Salut

Et quelle est ta requete ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
3
Date d'inscription
jeudi 18 août 2011
Statut
Membre
Dernière intervention
13 juin 2012

oui pardon.....

SELECT Table1.Week,
Sum(Table1.NbColis) AS NbColis,
Sum(Table2.Heures) AS Heures

FROM Table1 LEFT JOIN Table2 ON Table1.Week = Table2.Week

GROUP BY Table1.Week;


et le résultat

Week NbColis Heures

19 20 5
Messages postés
14790
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2021
155
Bonjour,

Essayes avec une requête imbriquée :

Select Table1.Id, SUM(Table1.Champ1) As TC1, (SELECT SUM(Table2.Champ2) FROM Table2 WHERE Table2.Id=Table1.Id1) As TC2 FROM Table1 WHERE ...

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
Oui, c'est normal car Access ne fait pas de présélection d'un élément de la table 1 pour chercher ceux de la table 2 (cas d'école, tu seras souvent confronté à ce problème).

Il suffit donc de faire 2 requetes en une seule.
Désolé, je ne suis pas adepte de la syntaxe SQL de Access et préfère les mots du langage d'origine (Where plutôt que Join)
SELECT Sum(Table1.NbColis) As xNbColis,
       (Select Sum(Table2.Heures) 
          From Table2 
         Where Table2.Week = 19) As xHeures
  From Table1
 Where Table1.Week = 19

Tu noteras que je n'ai pas écrit que les 2 Week sont raccordés car les Table1 et Table2 ne se connaissent pas (niveaux différents)
Si tu redescends Table2 d'un niveau, tu auras tes doublons (en fait, autant de valeurs que de lignes de données)
Messages postés
3
Date d'inscription
jeudi 18 août 2011
Statut
Membre
Dernière intervention
13 juin 2012

merci pour votre rapidité

je test tout ça et je vous tient au jus.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Bonsoir ,

Dans ton expresion, tu n' exprime pas le regroupement pour ta deuxième table.

SELECT Table1.Week,
Sum(Table1.NbColis) AS NbColis,
Sum(Table2.Heures) AS Heures
FROM Table1 LEFT JOIN Table2 ON Table1.Week = Table2.Week
GROUP BY Table1.Week, Table2.Week;

Attention:
Il se peut qu' il n' y ait pas d' équivalence entre les deux tables.
Un Week peut éxister dans l' une et pas dans l' autre.

Et ça arrive souvent quand on chercher à faire l' économie d' une requête, voir une table.




[] Ce qui va sans dire. va mieux en le disant.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Si tout ça ne fonctionne pas correctement, et si tu as la possibilité de le faire:

-Créer une requete UNION.
-Faire une requete regroupement sur cette requete (U1).

"SELECT Week, NbColis, 0 AS Heures FROM Table1 " & _
"UNION SELECT Week, 0 AS NbColis, Heures FROM Table2;" 
 

"SELECT U1.Week, SUM(NbColis) AS NbColis, " & _
"SUM(Heures) AS Heures FROM U1 " & _
"FROM U1 GROUP BY U1.Week;"


Autre solution:
-Créer un table temporaire (Week, NbColis,Heures)
-Y Insèrer Table1
-Y Insèrer Table2
-Faire une requete regroupement sur cette table temporaire.

@Jack
Il ne fallait pas confondre la clause where à la recherche d' une occurence,
et where (exprimé par NHenry) à la recherche d' une correspondance.






[] Ce qui va sans dire. va mieux en le disant.