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 13/10/2011, 18h39   #1
Membre du Club
 
Inscription : juin 2007
Messages : 271
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 271
Points : 65
Points : 65
Par défaut Requête group by

Bonjour,
j'ai par exemple

Citation:
Client surface ordre (unique)
cli1 20 4000
cli1 25 4002
cli1 30 4003
cli2 10 4005
cli2 5 3000
Je dois supprimer ceux qui ont la surface la plus petite
Je dois obtenir :
cli1 30 4002
cli2 10 4005

J'ai fait via access un regroupement (group by) sur client et choisi max pour surface . Je voudrais les exclure ensuite !
mais j'obtiens :
cli1 30
cli2 10

mais je n'ai pas ordre !
Avec regroupent pour ordre j'obtiens toutes les lignes !

MErci
Je cois qu'il y a plus simple !
falco- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 19h13   #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 Falco-,

C'est une question fréquente : tout n'est pas toujours possible en une seule fois !

Citation:
Envoyé par Falco-
J'ai fait via access un regroupement (group by) sur client et choisi max pour surface . Je voudrais les exclure ensuite !
mais j'obtiens :
cli1 30
cli2 10
==> Bravo, dans un premier temps. Appelons cette requête R1.

Il faut créer une requête R2 qui analyse R1 liée à ta table d'origine via Client et Surface ==> tu obtiendras Ordre qui correspond au Max() calculé par R1.
__________________
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 13/10/2011, 20h08   #3
Membre du Club
 
Inscription : juin 2007
Messages : 271
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 271
Points : 65
Points : 65
re,
dans la première requête j'ai
Code :
1
2
3
SELECT client.client, Max(client.surface) AS MaxDesurface
FROM client
GROUP BY client.client;
et la deuxième :
Code :
1
2
SELECT cli1.MaxDesurface, client.ordre
FROM cli1 INNER JOIN client ON cli1.client = client.client;
j'obtiens :
Citation:
MaxDesurface ordre
30 4000
30 4002
30 4003
10 4005
10 3000
MErci car je sèche ...

Je devris obtenir 4003 et 4005 !
falco- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 20h54   #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
Tu n"as pas appliqué la méthode proposée.

Passes par l'assistant et nommes R1 cette requête
Code :
1
2
3
SELECT client.client, Max(client.surface) AS MaxDesurface
FROM client
GROUP BY client.client;
Ensuite, par l"assistant :
Citation:
Envoyé par Richard_35
Il faut créer une requête R2 qui analyse R1 liée à ta table d'origine via Client et Surface ==> tu obtiendras Ordre qui correspond au Max() calculé par R1.
__________________
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 14/10/2011, 12h39   #5
Membre du Club
 
Inscription : juin 2007
Messages : 271
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 271
Points : 65
Points : 65
Bonjour,
désolé vous avez raison !
Avec un champ surface normal c'est ok

Mais !
j'ai également la requête R1 qui est de ce type :
Champ calculé sur la surface

Code :
1
2
3
SELECT client.client, Max([surface]/2) AS Expr1
FROM client
GROUP BY client.client;
là je ne vois pas comment faire ?

Merci
falco- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 12h49   #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
Bonjour Falco-,

Citation:
Envoyé par Falco-
là je ne vois pas comment faire ?
==> eh bien, il faut :
- créer une requête R3 qui analyse ta table de base avec [surface]/2 AS Moitié_Surface ;
- créer une requête R4 qui analyse R3 groupée, pour trouver Max(Moitié_Surface) ;
- appliquer la même méthode que précédemment pour obtenir des précisions sur les MAX() trouvés.
__________________
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 14/10/2011, 14h25   #7
Membre du Club
 
Inscription : juin 2007
Messages : 271
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 271
Points : 65
Points : 65
Bonjour,
oui en effet c'est parfait
Merci
falco- 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 07h09.


 
 
 
 
Partenaires

Hébergement Web