ACCESS - SQL

jlito -  
 jlito -
Bonjour,

J'ai une table avec un champ age et 5 colonnes de résultat calculé (somme ou %).

Je dois regrouper cette liste en trois catégories d'age (<=35 - de > 35 à < =50 ans - >50)
comment puis-je faire pour avoir une seule ligne pour chaque catégorie d'age dans la même requête sql ?

Mon test ne fonctionne pas mais ça devrais ressembler à quelque chose comme ceci ?

select sum(SommeDeFreqMal),avg(MoyenneDePourcAbsMal),Sum(SommeDeAT), avg(MoyenneDePourcentAbs),Avg(MoyenneDePourcentAbs), Avg(MoyenneDeIndiceBradford)
from (SELECT absenteisme.AgeFinAnnee, Sum(absenteisme.FreqMal) AS SommeDeFreqMal, Avg(absenteisme.PourcAbsMal) AS MoyenneDePourcAbsMal, Sum(absenteisme.AT) AS SommeDeAT, Avg(absenteisme.PourcentAbs) AS MoyenneDePourcentAbs, Avg(absenteisme.IndiceBradford) AS MoyenneDeIndiceBradford, "<= 35 ans" AS Tranche
FROM absenteisme
WHERE (((absenteisme.AgeFinAnnee)<=35)))
GROUP BY absenteisme.AgeFinAnnee
union
select sum(SommeDeFreqMal),avg(MoyenneDePourcAbsMal),Sum(SommeDeAT), avg(MoyenneDePourcentAbs),Avg(MoyenneDePourcentAbs), Avg(MoyenneDeIndiceBradford)
from (SELECT absenteisme.AgeFinAnnee, Sum(absenteisme.FreqMal) AS SommeDeFreqMal, Avg(absenteisme.PourcAbsMal) AS MoyenneDePourcAbsMal, Sum(absenteisme.AT) AS SommeDeAT, Avg(absenteisme.PourcentAbs) AS MoyenneDePourcentAbs, Avg(absenteisme.IndiceBradford) AS MoyenneDeIndiceBradford, "> 35 à < =50 ans" AS Tranche
FROM absenteisme
WHERE (((absenteisme.AgeFinAnnee)>35 And (absenteisme.AgeFinAnnee)<=50)))
GROUP BY absenteisme.AgeFinAnnee
UNION
select sum(SommeDeFreqMal),avg(MoyenneDePourcAbsMal),Sum(SommeDeAT), avg(MoyenneDePourcentAbs),Avg(MoyenneDePourcentAbs), Avg(MoyenneDeIndiceBradford)
from (SELECT absenteisme.AgeFinAnnee, Sum(absenteisme.FreqMal) AS SommeDeFreqMal, Avg(absenteisme.PourcAbsMal) AS MoyenneDePourcAbsMal, Sum(absenteisme.AT) AS SommeDeAT, Avg(absenteisme.PourcentAbs) AS MoyenneDePourcentAbs, Avg(absenteisme.IndiceBradford) AS MoyenneDeIndiceBradford, "> 50 ans" AS Tranche
FROM absenteisme
WHERE (((absenteisme.AgeFinAnnee)>50)))
GROUP BY absenteisme.AgeFinAnnee;

Merci pour votre aide.
Cordialement
john

1 réponse

jlito
 
Par contre, celle-ci fonctionne, mais je n'arrive pas à obtenir un total par groupe d'age :

SELECT absenteisme.AgeFinAnnee, Sum(absenteisme.FreqMal) AS SommeDeFreqMal, Avg(absenteisme.PourcAbsMal) AS MoyenneDePourcAbsMal, Sum(absenteisme.AT) AS SommeDeAT, Avg(absenteisme.PourcentAbs) AS MoyenneDePourcentAbs, Avg(absenteisme.IndiceBradford) AS MoyenneDeIndiceBradford, "<= 35 ans" AS Tranche
FROM absenteisme
WHERE (((absenteisme.AgeFinAnnee)<=35))
GROUP BY absenteisme.AgeFinAnnee
union
SELECT absenteisme.AgeFinAnnee, Sum(absenteisme.FreqMal) AS SommeDeFreqMal, Avg(absenteisme.PourcAbsMal) AS MoyenneDePourcAbsMal, Sum(absenteisme.AT) AS SommeDeAT, Avg(absenteisme.PourcentAbs) AS MoyenneDePourcentAbs, Avg(absenteisme.IndiceBradford) AS MoyenneDeIndiceBradford, "> 35 à < =50 ans" AS Tranche
FROM absenteisme
WHERE (((absenteisme.AgeFinAnnee)>35 And (absenteisme.AgeFinAnnee)<=50))
GROUP BY absenteisme.AgeFinAnnee
UNION SELECT absenteisme.AgeFinAnnee, Sum(absenteisme.FreqMal) AS SommeDeFreqMal, Avg(absenteisme.PourcAbsMal) AS MoyenneDePourcAbsMal, Sum(absenteisme.AT) AS SommeDeAT, Avg(absenteisme.PourcentAbs) AS MoyenneDePourcentAbs, Avg(absenteisme.IndiceBradford) AS MoyenneDeIndiceBradford, "> 50 ans" AS Tranche
FROM absenteisme
WHERE (((absenteisme.AgeFinAnnee)>50))
GROUP BY absenteisme.AgeFinAnnee;
0