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/10/2011, 03h34   #1
Invité de passage
 
Inscription : octobre 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 19
Points : 2
Points : 2
Par défaut classement par équipe

bonjour,

je suis en train de développer une petite base de données pour une course. j'ai donc deux tables :
ELEVE qui contient les champs "dossard_el, nom_el prénom_el, catégorie_el, date_el, ecole_el"
ARRIVEE qui contient les champs "ordre_ar, dossard_ar"

les tables sont liées par une relation entre les champs "dossards_el" et "dossards_ar".

j'ai créé une requete ou lorsque je rentre le numéro de dossard dans le champs "dossard_ar" les informations des champs "nom_el prénom_el, catégorie_el, date_el, ecole_el" apparaissent automatiquement.

Pour les classements individuels tout marche bien.

Maintenant pour les classements par équipe, je voudrais faire en sorte que pour chaque catégorie, la base de donnée recherche les 5 premiers coureurs de chaque école afin d'additionner leur place et que donc l'école qui a le moins de points aura gagné.

exemple :

catégorie benjamines
école saint hilaire : 1er, 3ème, 5ème, 7ème, 12ème, 13ème, 22ème...
on ne prend que les 5 premier et on ajoute leur places
1+3+5+7+12=28 points
école saint michel : 2ème, 4ème, 6ème, 9ème, 14ème, 16ème...
on ne prend que les 5 premiers et on ajoute leur places
2+4+6+9+14=35 points
saint hilaire est 1er par équipe car 28 points, saint michel 2ème par équipe, etc...

La base de données est disponible, je peux vous l'envoyer si besoin

merci pour votre aide

Raiamanu
raiamanu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2011, 09h35   #2
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 753
Points : 1 753
Bonjour,
par code cela est possible.
Il faudrait ajouter un champ ordre_ec dans la table arrivée qui classe par ecole
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
Sub resultat()
 Dim t As DAO.Recordset
 Set t = CurrentDb.OpenRecordset("SELECT arrivee.ordre_ec, eleve.ecole_el, arrivee.ordre_ar FROM arrivee INNER JOIN eleve ON arrivee.dossard_ar = eleve.dossard_el ORDER BY eleve.ecole_el, arrivee.ordre_ar;")
 Do Until t.EOF
  If t!ecole_el <> ec Then
   n = 1
   ec = t!ecole_el
  End If
  t.Edit
  t!ordre_ec = n
  t.Update
  n = n + 1
  t.MoveNext
 Loop
 t.Close
 Set t = Nothing
 
 DoCmd.RunSQL "reqResultat"
End Sub
la requête reqResultat somme les 5 premiers arrivées de chaque école et donne donc le résultat souhaité

Code :
1
2
3
4
5
6
 
SELECT eleve.ecole_el, Sum(arrivee.ordre_ar) AS SommeDeordre_ar
FROM arrivee INNER JOIN eleve ON arrivee.dossard_ar = eleve.dossard_el
WHERE (((arrivee.ordre_ec)<6))
GROUP BY eleve.ecole_el
ORDER BY Sum(arrivee.ordre_ar);
helas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2011, 12h01   #3
Invité de passage
 
Inscription : octobre 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 19
Points : 2
Points : 2
super !

je travaille dessus et je vous tiens au courant

merci
raiamanu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 19h22   #4
Invité de passage
 
Inscription : octobre 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 19
Points : 2
Points : 2
Bonjour et merci encore pour votre aide

j'ai suivi vos conseils et j'ai bien la somme des 5 premiers arrivés de chaque école toutes catégorie confondues.

je voudrais juste apporter des précisions supplémentaires dont j'ai ommis certains lors de mon premier message (désolé) :

j'ai créé une table supplémentaire que j'ai nommée CATEGORIE avec les champs suivants : Num_cat, Libelle_cat, annee1_cat, annee2_cat, sexe_cat

Les tables ELEVE et CATEGORIE sont liées par une relation entre les champs categorie_el et Libelle_cat.

la table ARRIVEE enregistre l'arrivee de toutes les courses toutes catégories confondues. Pour les imprimer je passe par une requete, un etat et une condition qui va filtrer les résultats par catégorie, puisque chaque élève fait partie d'une et une seule catégorie et que la table ARRIVEE enregistre les arrivées dans l'ordre.

ma question est :
y a t'il moyen d'ajouter un critère supplémentaire dans le code qui ferait en sorte que le comptage et la somme se fasse par catégorie et non toutes catégories confondues ?

Merci

Raiamanu
raiamanu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/10/2011, 14h57   #5
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 753
Points : 1 753
Bonjour,
2 modifications :
le code devient
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub resultat()
 Dim t As DAO.Recordset, ec As String, ca As String
 Set t = CurrentDb.OpenRecordset("SELECT  eleve.categorie_el, eleve.ecole_el, arrivee.ordre_ar, arrivee.ordre_ec FROM (arrivee INNER JOIN eleve ON arrivee.dossard_ar = eleve.dossard_el) INNER JOIN categorie ON eleve.categorie_el = categorie.num_categorie ORDER BY categorie.libelle_cat, eleve.ecole_el, arrivee.ordre_ar;")
 ec = "": ca = ""
 Do Until t.EOF
  If (t!categorie_el <> ca) Or (t!ecole_el <> ec) Then
   n = 1
   ec = t!ecole_el
  End If
  t.Edit
  t!ordre_ec = n
  t.Update
  n = n + 1
  t.MoveNext
 Loop
 t.Close
 Set t = Nothing
 
 DoCmd.RunSQL "reqResultat"
End Sub
et la requête reqResultat
Code :
1
2
3
4
5
6
 
SELECT eleve.categorie_el, eleve.ecole_el, Sum(arrivee.ordre_ar) AS SommeDeordre_ar
FROM arrivee INNER JOIN eleve ON arrivee.dossard_ar = eleve.dossard_el
WHERE (((arrivee.ordre_ec)<6))
GROUP BY eleve.categorie_el, eleve.ecole_el
ORDER BY eleve.categorie_el, Sum(arrivee.ordre_ar);
helas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 12h01   #6
Invité de passage
 
Inscription : octobre 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 19
Points : 2
Points : 2
bonjour,

j'ai appliqué les modifications que vous avez posté et j'ai une fenetre qui apparait et qui dit :

- Erreur d'exécution 3061
- Trop peut de parametres. 1 attendu

Lorsque je clique sur le bouton débogage il m'ouvre la fenetre visual basic et me surligne en jaune la ligne 3 du code :

- Set t = CurrentDb.OpenRecordset("SELECT eleve.categorie_el, eleve.ecole_el, arrivee.ordre_ar, arrivee.ordre_ec FROM (arrivee INNER JOIN eleve ON arrivee.dossard_ar = eleve.dossard_el) INNER JOIN categorie ON eleve.categorie_el = categorie.num_categorie ORDER BY categorie.libelle_cat, eleve.ecole_el, arrivee.ordre_ar;")

merci pour votre aide

Raiamanu
raiamanu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web