Requete avec des tranches d'age (group by) [Résolu]

Signaler
Messages postés
153
Date d'inscription
jeudi 25 avril 2002
Statut
Membre
Dernière intervention
3 juillet 2014
-
Messages postés
153
Date d'inscription
jeudi 25 avril 2002
Statut
Membre
Dernière intervention
3 juillet 2014
-
Bonjour

J'ai un petit soucis dans VB/Access.

J'ai une table personne avec 3 champs : nom, prénom, age (en faite c'est la date de naissance mais je calcul l'age).

Je voudrais faire un group by mais pas par age par "tranche d'age".

Par exemple pour le nombre de personne entre moins de 18,18-25, 26 et 45, 46 et +

Car après je dois faire un graphique (Il vaut mieu le faire avec Visual basic ou Access ?)

Merci d'avance pour votre aide sur la requete et éventuellement le graphique.

10 réponses

Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
"SELECT MaTABLE.Nom, MaTABLE.Prenom, MaTABLE.Dat_naiss, _
 CInt(Now()-[Dat_naiss])/364 AS Age, _
 IIf([Age]<=18,1,IIf(([Age]>18) And ([Age]<=26),2, _
 IIf(([Age]>26) And ([Age]<=45),3,4))) AS Tranche _
 FROM MaTABLE;"

 chaibat
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Si tu n'a pas de zone "Tranche_age" dans ta table tu ne peux pas faire de Group By. Le mieux serait de rajouter cette zone sous forme numérique et lorque tu calcul l'age tu la renseigne de la façon suivante:

If age < 18 Then
     tranche_age = 1
Elseif age > 17 And age < 26 Then
     tranche_age = 2
elseif age >25 And age < 46 Then
    tranche_age = 3
else
    tranche_age = 4
endif

Ensuite tu pourras faire un Group By sur Tranche avec le n° correspondant.
Messages postés
153
Date d'inscription
jeudi 25 avril 2002
Statut
Membre
Dernière intervention
3 juillet 2014

Oui mais je calcule l'age dans la requete directement. Les if else ca passe pas dans une requete.
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Tu peux faire quatre requète avec un update pour determiner la tranche d'age, du genre:

Update MaTable set tranche_age = 1 where age < 18
Update MaTable set tranche_age = 2 where age > 17 and age < 26
etc..
Messages postés
153
Date d'inscription
jeudi 25 avril 2002
Statut
Membre
Dernière intervention
3 juillet 2014

Je te remercie.

Je vais essayer, ce soir en rentrant, par contre je crois que le WHERE sur age vu qu'il est caclculé, ca ne vas pas passé.

J'ai voulu afficher les personnes de plus de 18 ans avec :

SELECT nom,Round(CInt(Now()-[date_naissance])/364) as age FROM Tbl_personnes WHERE age > 18

Ca marche pas

SELECT nom,Round(CInt(Now()-[date_naissance])/364) as age FROM Tbl_personnes WHERE Round(CInt(Now()-[date_naissance])/364)>18

Ca non plus
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Aie.. En Effet ça ne marchera pas, je pensais que age était un champ de la table que tu calculais par Update.
Messages postés
153
Date d'inscription
jeudi 25 avril 2002
Statut
Membre
Dernière intervention
3 juillet 2014

Je peux faire 2 update de suite sinon, un pour calculer un champs age et après pour la plage.

Je te remercie pour tes infos
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonjour,
Tu fais deux requêtes Selection (et pas Update)


Requête 1
Nom / Prenom / Dat_naiss / Galcul_Age / Tranche_Age
                                                                          (générée à partir de Calcul_Age
                                                                           directement sur cette même
                                                                           requête)




Requête 2
Nom / Prenom / Tranche_Age

chaibat


 
Messages postés
153
Date d'inscription
jeudi 25 avril 2002
Statut
Membre
Dernière intervention
3 juillet 2014

Bonjour

La première requete ressemble à quoi ?
Messages postés
153
Date d'inscription
jeudi 25 avril 2002
Statut
Membre
Dernière intervention
3 juillet 2014

Ca marche parfaitement, merci pour votre aide.