OVH Cloud OVH Cloud

Tranche d'age

8 réponses
Avatar
Florent
Bonjour,

Voil=E0, actuellement j'utilise les requ=EAtes d'analyses=20
crois=E9es pour cr=E9er des tableaux crois=E9s dynamiques sous=20
forme de formulaire. Cela marche tr=E8s bien, surtout pour=20
les dates que l'on peut regrouper sous des ann=E9es, des=20
mois, ... .

Le probl=E8me, est que je souhaiterais regrouper l'age par=20
tranche d'ages de 5 ans (par ex : 25 - 29, 30 - 34, ...)

Comment faire dans ma requ=EAte pour lui sp=E9cifier cela.

Merci d'avance.

8 réponses

Avatar
Xavier HUE
Bonjour Florent,

Par SQL, désolé, je ne vois.

Tu peut éventuellement créer une table
TblTrancheAge (Code, Libelle)

1, "25 - 29"
2, "30 - 34" etc.

Ajouter ce champ Code dans une des tables sources de ta
requête.
Joindre cette table, et regrouper sur le code.

A voir...
Cordialement.
Xavier.
Avatar
Florent
Oui je vois ce que tu veux dire.

Mais je pensais que l'on pouvait y appliquer un format
comme pour les dates

Merci quand même.


-----Message d'origine-----
Bonjour Florent,

Par SQL, désolé, je ne vois.

Tu peut éventuellement créer une table
TblTrancheAge (Code, Libelle)

1, "25 - 29"
2, "30 - 34" etc.

Ajouter ce champ Code dans une des tables sources de ta
requête.
Joindre cette table, et regrouper sur le code.

A voir...
Cordialement.
Xavier.
.



Avatar
Nicolas Mathieu
TRANSFORM Count([table1].[Num]) AS CompteDeNum
SELECT
Int(datediff("d",[table1].[Date],Date())/1826.25)*5 & "-" &
Int(datediff("d",[table1].[Date],Date())/1826.25)*5+4 AS TrancheDAge,
Count(table1.Num) AS [Total de Num]
FROM table1
GROUP BY Int(datediff("d",[table1].[Date],Date())/1826.25)
PIVOT [table1].[Nom];

c'est la fonction Int(datediff("d",[table1].[Date],Date())/1826)
qui est intéressante.
Elle divise le nombre de jour (entre le date du jour et la date de naissance
dans cet exemple) par 1826,25 (365.25j X 5)
On obtient 0 pour quelqu'un entre 0 et 4ans, 1 pour quelqu'un entre 5 et
9ans, 2 pour quelqu'un entre 10 et 14ans... etc...

On remultiplie ce nombre par 5 pour avoir l'affichage réelle de l'age.

J'ai pas trop eu le temps de me pencher dessus mais ça c'est ce que j'ai
trouvé de plus simple.

Nico











"Florent" a écrit dans le message de
news:0ff101c3a915$284abd60$
Oui je vois ce que tu veux dire.

Mais je pensais que l'on pouvait y appliquer un format
comme pour les dates

Merci quand même.


-----Message d'origine-----
Bonjour Florent,

Par SQL, désolé, je ne vois.

Tu peut éventuellement créer une table
TblTrancheAge (Code, Libelle)

1, "25 - 29"
2, "30 - 34" etc.

Ajouter ce champ Code dans une des tables sources de ta
requête.
Joindre cette table, et regrouper sur le code.

A voir...
Cordialement.
Xavier.
.



Avatar
Florent
La fonction est un peu complexe mais il fallait y penser.

Je vais tester cela

Merci



-----Message d'origine-----



TRANSFORM Count([table1].[Num]) AS CompteDeNum
SELECT
Int(datediff("d",[table1].[Date],Date())/1826.25)*5
& "-" &

Int(datediff("d",[table1].[Date],Date())/1826.25)*5+4 AS
TrancheDAge,

Count(table1.Num) AS [Total de Num]
FROM table1
GROUP BY Int(datediff("d",[table1].[Date],Date())/1826.25)
PIVOT [table1].[Nom];

c'est la fonction Int(datediff("d",[table1].
[Date],Date())/1826)

qui est intéressante.
Elle divise le nombre de jour (entre le date du jour et
la date de naissance

dans cet exemple) par 1826,25 (365.25j X 5)
On obtient 0 pour quelqu'un entre 0 et 4ans, 1 pour
quelqu'un entre 5 et

9ans, 2 pour quelqu'un entre 10 et 14ans... etc...

On remultiplie ce nombre par 5 pour avoir l'affichage
réelle de l'age.


J'ai pas trop eu le temps de me pencher dessus mais ça
c'est ce que j'ai

trouvé de plus simple.

Nico











"Florent" a écrit
dans le message de

news:0ff101c3a915$284abd60$
Oui je vois ce que tu veux dire.

Mais je pensais que l'on pouvait y appliquer un format
comme pour les dates

Merci quand même.


-----Message d'origine-----
Bonjour Florent,

Par SQL, désolé, je ne vois.

Tu peut éventuellement créer une table
TblTrancheAge (Code, Libelle)

1, "25 - 29"
2, "30 - 34" etc.

Ajouter ce champ Code dans une des tables sources de ta
requête.
Joindre cette table, et regrouper sur le code.

A voir...
Cordialement.
Xavier.
.




.




Avatar
C15
Bonjour Florent,

Tu peux aussi utiliser la fonction Partition

Par ex :

TRANSFORM Count([T Adhérents].N°Adherent) AS CompteDeN°Adherent1
SELECT [T Adhérents].Specialite
FROM [T Adhérents] INNER JOIN [R calcul âges] ON [T Adhérents].N°Adherent [R calcul âges].N°Adherent
GROUP BY [T Adhérents].Specialite
PIVOT nz(Partition([R calcul âges]![Age],0,100,10),"âge inconnu");

me donne la répartition d'adhérents par spécialités et tranches d'âges.

A+

c15


"Florent" a écrit dans le message de
news:065b01c3a930$98087000$
La fonction est un peu complexe mais il fallait y penser.

Je vais tester cela

Merci



-----Message d'origine-----



TRANSFORM Count([table1].[Num]) AS CompteDeNum
SELECT
Int(datediff("d",[table1].[Date],Date())/1826.25)*5
& "-" &

Int(datediff("d",[table1].[Date],Date())/1826.25)*5+4 AS
TrancheDAge,

Count(table1.Num) AS [Total de Num]
FROM table1
GROUP BY Int(datediff("d",[table1].[Date],Date())/1826.25)
PIVOT [table1].[Nom];

c'est la fonction Int(datediff("d",[table1].
[Date],Date())/1826)

qui est intéressante.
Elle divise le nombre de jour (entre le date du jour et
la date de naissance

dans cet exemple) par 1826,25 (365.25j X 5)
On obtient 0 pour quelqu'un entre 0 et 4ans, 1 pour
quelqu'un entre 5 et

9ans, 2 pour quelqu'un entre 10 et 14ans... etc...

On remultiplie ce nombre par 5 pour avoir l'affichage
réelle de l'age.


J'ai pas trop eu le temps de me pencher dessus mais ça
c'est ce que j'ai

trouvé de plus simple.

Nico











"Florent" a écrit
dans le message de

news:0ff101c3a915$284abd60$
Oui je vois ce que tu veux dire.

Mais je pensais que l'on pouvait y appliquer un format
comme pour les dates

Merci quand même.


-----Message d'origine-----
Bonjour Florent,

Par SQL, désolé, je ne vois.

Tu peut éventuellement créer une table
TblTrancheAge (Code, Libelle)

1, "25 - 29"
2, "30 - 34" etc.

Ajouter ce champ Code dans une des tables sources de ta
requête.
Joindre cette table, et regrouper sur le code.

A voir...
Cordialement.
Xavier.
.




.




Avatar
Xavier HUE
Boujour tous,

Alors là les gars, chapeau!
Je me les mets au chaud ces deux SQL!

On sent une certaine maîtrise de SQL, sinon, une maitrîse
certaine. ;-)

Cordialement.
Xavier.
Avatar
fabienne HUÏEZ
Voici comment j'ai résolu le problème.
(je peux t'envoyer ma base exemple si tu me transmets ton
adresse mail)
Sous Access, j'ai
une table Client (Nom, prénom,...anneeNaissance, age,...).
L'âge est calculé(annéecourante - anneeNaissance)

et une table GroupeAge :
age-min age_max age_range
18 25 18-25
26 40 25-40
41 60 40-60
61 100 plus de 60

1 client appartient a un et un seul groupe d'âge. Chaque
groupe d'âge a plusieurs clients

Quel champ utiliser pour mettre en relation les deux
tables, de façon à faire une requête qui m'afficherait :
nom âge groupe
TITI 18 18-25
TOTO 19 18-25
TATA 67 plus de 60


1ère solution proposée :
SELECT Customer.last_name, Customer.age,
Age_group.age_range
FROM Age_group, Customer
WHERE (((Customer.age)>=[age_min] And (Customer.age)<=
[age_max]))
GROUP BY Customer.last_name, Customer.age,
Age_group.age_range
ORDER BY Customer.last_name;

2ème solution proposée :
SELECT Customer.last_name, Customer.age, IIf([age]> And
[age]<26,"18-25",IIf([age]>& And [age]<41,"25-40",IIf
([age]>A And [age]<61,"41-60","plus de 60"))) AS
categorie
FROM Customer;


-----Message d'origine-----
Bonjour,

Voilà, actuellement j'utilise les requêtes d'analyses
croisées pour créer des tableaux croisés dynamiques sous
forme de formulaire. Cela marche très bien, surtout pour
les dates que l'on peut regrouper sous des années, des
mois, ... .

Le problème, est que je souhaiterais regrouper l'age par
tranche d'ages de 5 ans (par ex : 25 - 29, 30 - 34, ...)

Comment faire dans ma requête pour lui spécifier cela.

Merci d'avance.
.



Avatar
Nicolas Mathieu
Bien vu, mais ça n'est pas très pratique si chaque année tu dois changer
l'âge de tes clients!

"fabienne HUÏEZ" a écrit dans le message
de news:0e2701c3aa00$4e2d9d40$
Voici comment j'ai résolu le problème.
(je peux t'envoyer ma base exemple si tu me transmets ton
adresse mail)
Sous Access, j'ai
une table Client (Nom, prénom,...anneeNaissance, age,...).
L'âge est calculé(annéecourante - anneeNaissance)

et une table GroupeAge :
age-min age_max age_range
18 25 18-25
26 40 25-40
41 60 40-60
61 100 plus de 60

1 client appartient a un et un seul groupe d'âge. Chaque
groupe d'âge a plusieurs clients

Quel champ utiliser pour mettre en relation les deux
tables, de façon à faire une requête qui m'afficherait :
nom âge groupe
TITI 18 18-25
TOTO 19 18-25
TATA 67 plus de 60


1ère solution proposée :
SELECT Customer.last_name, Customer.age,
Age_group.age_range
FROM Age_group, Customer
WHERE (((Customer.age)>=[age_min] And (Customer.age)< [age_max]))
GROUP BY Customer.last_name, Customer.age,
Age_group.age_range
ORDER BY Customer.last_name;

2ème solution proposée :
SELECT Customer.last_name, Customer.age, IIf([age]> And
[age]<26,"18-25",IIf([age]>& And [age]<41,"25-40",IIf
([age]>A And [age]<61,"41-60","plus de 60"))) AS
categorie
FROM Customer;


-----Message d'origine-----
Bonjour,

Voilà, actuellement j'utilise les requêtes d'analyses
croisées pour créer des tableaux croisés dynamiques sous
forme de formulaire. Cela marche très bien, surtout pour
les dates que l'on peut regrouper sous des années, des
mois, ... .

Le problème, est que je souhaiterais regrouper l'age par
tranche d'ages de 5 ans (par ex : 25 - 29, 30 - 34, ...)

Comment faire dans ma requête pour lui spécifier cela.

Merci d'avance.
.