Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/09/2011, 13h33   #1
Membre du Club
 
Inscription : octobre 2005
Messages : 304
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 304
Points : 59
Points : 59
Par défaut Problème avec GROUP BY

Bonjour et merci a ceux qui me lisent.

j'utilise un group by dans une requete et je ne comprends pas le résultat obtenu.

en fait j'ai l'impression qu'il ne me revoi pas tous les enregistrements.

voici ma requete :

Code :
1
2
3
4
SELECT Facture.ApplicationGroupeApplication 
FROM Facture WHERE Facture.periode='2011 Budget' AND Facture.ClientNiveau3 = 'DCFG' 
GROUP BY Facture.ApplicationGroupeApplication 
ORDER BY Facture.ApplicationGroupeApplication
Dans le champs ApplicationGroupeApplication, j'ai entre autre les valeurs suivantes
"SCORE"
"SCORE "

Vous remarquerez que la deuxième valeur contient un espace en fin de chaine.

Avec la requete ci-dessus le résultat ne me renvoi qu'une seule occurrence de SCORE et c'est celle avec l'espace ! Je n'ai pas d'occurences sur le SCORE sans espace.
Ce sont pourtant deux chaine différentes...
Si j'enlève le GROUP BY de la requete, j'ai bien plusieurs occurences avec les deux SCORE (avec et sans espace).

Est-ce que quelqu'un sait ce qui se passe ?
Merci.
_developpeur_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 14h26   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Bonjour _developpeur_,

J'ignorais cette subtilité d'Access.

Je pense que "SCORE" et "SCORE " sont dans le même groupe (GROUP BY).
Essaies :
- un Count(*) avec un WHERE = "SCORE" ;
- un Count(*) avec un WHERE = "SCORE ".
==> le Count(*) de la requête que tu présentes est-il égal à la somme des deux Count(*) ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 14h53   #3
Membre du Club
 
Inscription : octobre 2005
Messages : 304
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 304
Points : 59
Points : 59
Bonjour Richard et merci de ta réponse.

Code :
1
2
3
SELECT Count(*)
FROM Facture
WHERE Facture.periode='2011 Budget' And Facture.ClientNiveau3='DCFG' AND ApplicationGroupeApplication='SCORE'
renvoi 5.

Code :
1
2
3
SELECT Count(*)
FROM Facture
WHERE Facture.periode='2011 Budget' And Facture.ClientNiveau3='DCFG' AND ApplicationGroupeApplication='SCORE '
renvoi 5.

Code :
1
2
3
4
5
SELECT Count(*), ApplicationGroupeApplication
FROM Facture
WHERE Facture.periode='2011 Budget' And Facture.ClientNiveau3='DCFG' 
GROUP BY ApplicationGroupeApplication
ORDER BY ApplicationGroupeApplication;
Renvoi également 5 sur la ligne "SCORE ".
_developpeur_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 15h11   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Donc, Access considère que "SCORE" et "SCORE " sont dans le même groupe (GROUP BY) et te présente le résultat sous "SCORE ".

Les 5 enregistrements comptés sont donc les mêmes (vérifies sans le GROUP BY en sélectionnant la clé).

Il suffit de le savoir... ce qui n'était pas mon cas, je l'avoue.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 15h22   #5
Membre du Club
 
Inscription : octobre 2005
Messages : 304
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 304
Points : 59
Points : 59
OK Richard, mais ça me pose un autre problème :

si je met ma requete complète (avec d'autres champs)

Code :
1
2
3
4
5
SELECT Facture.ApplicationGroupeApplication, Facture.FamilleService, Facture.Service, Facture.CategorieApplication, Facture.CritereTri, Facture.PrixService,Facture.CoutTotalService,Facture.UOCleRepartitionClient,Facture.NombreTotalUO,facture.PrixUnitaireUO, facture.NombreUOClient,facture.QuotePartClient, facture.ClientNiveau1, facture.ClientNiveau2 
FROM Facture 
WHERE Facture.periode='2011 Budget' AND Facture.ClientNiveau3 = 'DCFG' 
GROUP BY Facture.ApplicationGroupeApplication, Facture.FamilleService, Facture.CritereTri, Facture.Service, Facture.CategorieApplication, Facture.PrixService,Facture.CoutTotalService,Facture.UOCleRepartitionClient,Facture.NombreTotalUO,facture.PrixUnitaireUO, facture.NombreUOClient,facture.QuotePartClient, Facture.ClientNiveau1 , Facture.ClientNiveau2 
ORDER BY Facture.ApplicationGroupeApplication, Facture.FamilleService, Facture.CritereTri, Facture.Service, Facture.CategorieApplication, Facture.PrixService
Avec cette requête, j'ai mes 5 enregistrements "SCORE" et "SCORE ".
Sauf que le group by et l'order by ne font pas leur travail or je m'en sert par la suite dans le code VBA pour faire des sous totaux par groupe d'applications.

La j'obtiens en 1ere ligne "SCORE", ==> rupture donc 1ere sous total, en 2eme ligne "SCORE " en 3eme "SCORE " ==> rupture donc 2eme sous total, en 4eme et en 5eme a nouveau "SCORE" ==> rupture 3 eme sous total.

Alors que j'aurais du avoir uniquement deux sous totaux. tu vois le truc ?
si tu as une idée pour contourner, je suis preneur...

merci
_developpeur_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 15h33   #6
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Comment est alimenté le champ ApplicationGroupeApplication de Facture ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 15h36   #7
Membre du Club
 
Inscription : octobre 2005
Messages : 304
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 304
Points : 59
Points : 59
avec une requete insert dont les données proviennent d'une autre table, elle meme alimentée a l'aide d'un fichier excel.

Merci
_developpeur_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 15h44   #8
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Eh bien, lors de l'alimentation de l'autre table par le fichier excel, utilises la fonction SupprEspace() de l'assistant, correspondant à Trim() en mode SQL.

Cette fonction supprime les espaces avant et après la chaîne de caractères Excel.

Pour l'existant, crées une requête UPDATE qui utilise cette même fonction sur le champ concerné.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 16h03   #9
Membre du Club
 
Inscription : octobre 2005
Messages : 304
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 304
Points : 59
Points : 59
Richard, je suis confus mais je n'ai pas bien compris ta solution, la fonction SUPPRESPACE est une fonction VBA ?
Aurais-tu la correspondance en anglais car mon poste est configuré en anglais.

Donc si je comprends bien a la lecture du fichier excel dans mon code VBA j'utiliserai cette fonction ainsi je n'aurai pas de problème dans ma table ?

merci beaucoup.
_developpeur_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 16h08   #10
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Citation:
Envoyé par _developpeur_
Donc si je comprends bien a la lecture du fichier excel dans mon code VBA j'utiliserai cette fonction ainsi je n'aurai pas de problème dans ma table ?
==> oui, pour les nouvelles intégrations de fichier Excel (à faire en premier, donc).

Pour résoudre l'existant, il faut passer par une requête UPDATE avec Trim() (à faire en dernier).

Je t'invite à consulter l'aide et Google => "fonction Trim() access" : tout y est.

Testes la chose, sur un ancien fichier Excel, c'est tout simple.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 17h15   #11
Membre du Club
 
Inscription : octobre 2005
Messages : 304
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 304
Points : 59
Points : 59
Richard, encore une fois merci de ton aide.

le problème a été résolu, pour l'utilisateur il s'agit de saisir SCORE de la même manière car ça désigne en fait la même valeur.

il faut donc plus de cohérence dans la saisie du fichier excel.
_developpeur_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h57.


 
 
 
 
Partenaires

Hébergement Web