Bonjour,
Comment éviter les doublons dans une requête ?
........................................................................
Je souhaite convoquer des adhérents ayant été membres ces trois dernières années:
- une table adhérents
Avec un Champ : Nom
- une table adhésion
Avec un Champ années
Dans les champs -Nom certains ont été membres tous les ans et d'autres non.
.............................................................................
Dans ma requête j'ai demandé regroupement, mais j'ai du oublié autre chose
car ça ne fonctionne pas.
D'avance merci !
Bonjour,
Comment éviter les doublons dans une requête ?
........................................................................
Je souhaite convoquer des adhérents ayant été membres ces trois dernières années:
- une table adhérents
Avec un Champ : Nom
- une table adhésion
Avec un Champ années
Dans les champs -Nom certains ont été membres tous les ans et d'autres non.
.............................................................................
Dans ma requête j'ai demandé regroupement, mais j'ai du oublié autre chose
car ça ne fonctionne pas.
D'avance merci !
Bonjour,
Comment éviter les doublons dans une requête ?
........................................................................
Je souhaite convoquer des adhérents ayant été membres ces trois dernières années:
- une table adhérents
Avec un Champ : Nom
- une table adhésion
Avec un Champ années
Dans les champs -Nom certains ont été membres tous les ans et d'autres non.
.............................................................................
Dans ma requête j'ai demandé regroupement, mais j'ai du oublié autre chose
car ça ne fonctionne pas.
D'avance merci !
bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm
l'option "distinct"
bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm
l'option "distinct"
bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm
l'option "distinct"
Le 12/02/2011 23:44, Freeman a écrit :Bonjour,
Comment éviter les doublons dans une requête ?
........................................................................
Je souhaite convoquer des adhérents ayant été membres ces trois dernières
années:
- une table adhérents
Avec un Champ : Nom
- une table adhésion
Avec un Champ années
Dans les champs -Nom certains ont été membres tous les ans et d'autres
non.
.............................................................................
Dans ma requête j'ai demandé regroupement, mais j'ai du oublié autre
chose
car ça ne fonctionne pas.
D'avance merci !
bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm
l'option "distinct"
Le 12/02/2011 23:44, Freeman a écrit :
Bonjour,
Comment éviter les doublons dans une requête ?
........................................................................
Je souhaite convoquer des adhérents ayant été membres ces trois dernières
années:
- une table adhérents
Avec un Champ : Nom
- une table adhésion
Avec un Champ années
Dans les champs -Nom certains ont été membres tous les ans et d'autres
non.
.............................................................................
Dans ma requête j'ai demandé regroupement, mais j'ai du oublié autre
chose
car ça ne fonctionne pas.
D'avance merci !
bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm
l'option "distinct"
Le 12/02/2011 23:44, Freeman a écrit :Bonjour,
Comment éviter les doublons dans une requête ?
........................................................................
Je souhaite convoquer des adhérents ayant été membres ces trois dernières
années:
- une table adhérents
Avec un Champ : Nom
- une table adhésion
Avec un Champ années
Dans les champs -Nom certains ont été membres tous les ans et d'autres
non.
.............................................................................
Dans ma requête j'ai demandé regroupement, mais j'ai du oublié autre
chose
car ça ne fonctionne pas.
D'avance merci !
bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm
l'option "distinct"
"P3859" a écrit dans le message de news:
4d57b357$0$11586$Le 12/02/2011 23:44, Freeman a écrit :Bonjour,
Comment éviter les doublons dans une requête ?
........................................................................
Je souhaite convoquer des adhérents ayant été membres ces trois dernières
années:
- une table adhérents
Avec un Champ : Nom
- une table adhésion
Avec un Champ années
Dans les champs -Nom certains ont été membres tous les ans et d'autres
non.
.............................................................................
Dans ma requête j'ai demandé regroupement, mais j'ai du oublié autre
chose
car ça ne fonctionne pas.
D'avance merci !
bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm
l'option "distinct"
Comme ça :
http://cjoint.com/?0cnreLyNSdK
"P3859" <p3859@free.fr> a écrit dans le message de news:
4d57b357$0$11586$426a74cc@news.free.fr...
Le 12/02/2011 23:44, Freeman a écrit :
Bonjour,
Comment éviter les doublons dans une requête ?
........................................................................
Je souhaite convoquer des adhérents ayant été membres ces trois dernières
années:
- une table adhérents
Avec un Champ : Nom
- une table adhésion
Avec un Champ années
Dans les champs -Nom certains ont été membres tous les ans et d'autres
non.
.............................................................................
Dans ma requête j'ai demandé regroupement, mais j'ai du oublié autre
chose
car ça ne fonctionne pas.
D'avance merci !
bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm
l'option "distinct"
Comme ça :
http://cjoint.com/?0cnreLyNSdK
"P3859" a écrit dans le message de news:
4d57b357$0$11586$Le 12/02/2011 23:44, Freeman a écrit :Bonjour,
Comment éviter les doublons dans une requête ?
........................................................................
Je souhaite convoquer des adhérents ayant été membres ces trois dernières
années:
- une table adhérents
Avec un Champ : Nom
- une table adhésion
Avec un Champ années
Dans les champs -Nom certains ont été membres tous les ans et d'autres
non.
.............................................................................
Dans ma requête j'ai demandé regroupement, mais j'ai du oublié autre
chose
car ça ne fonctionne pas.
D'avance merci !
bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm
l'option "distinct"
Comme ça :
http://cjoint.com/?0cnreLyNSdK
bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm
l'option "distinct"
Comme ça :
http://cjoint.com/?0cnreLyNSdK
J'aimerais bien voir le SQL de la requête car je pense que tu n'as pas
besoin de "DISTINCT".
bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm
l'option "distinct"
Comme ça :
http://cjoint.com/?0cnreLyNSdK
J'aimerais bien voir le SQL de la requête car je pense que tu n'as pas
besoin de "DISTINCT".
bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm
l'option "distinct"
Comme ça :
http://cjoint.com/?0cnreLyNSdK
J'aimerais bien voir le SQL de la requête car je pense que tu n'as pas
besoin de "DISTINCT".
Le 13/02/2011 17:17, Michel__D a écrit :bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm
l'option "distinct"
Comme ça :
http://cjoint.com/?0cnreLyNSdK
J'aimerais bien voir le SQL de la requête car je pense que tu n'as pas
besoin de "DISTINCT".
Tu sais je ne suis pas un Pro, sinon je ne poserai pas ce genre de
question.
Avant j'allais me faire aider sur les forum Microsoft, mais il ne
doivent plus exister ?
Comme ça :
SELECT DISTINCT adhérents.Titre, adhérents.Prénom, adhérents.Nom,
adhérents.Adresse1, adhérents.Adresse2, adhérents.[Code Postal],
adhérents.Ville, adhérents.retraité, Max(adhésion.année) AS MaxDeannée
FROM adhérents INNER JOIN adhésion ON adhérents.refadherent =
adhésion.refadherent
GROUP BY adhérents.Titre, adhérents.Prénom, adhérents.Nom,
adhérents.Adresse1, adhérents.Adresse2, adhérents.[Code Postal],
adhérents.Ville, adhérents.retraité
HAVING (((adhérents.retraité)=True) AND ((Max(adhésion.année)) 09)) OR
(((adhérents.retraité)=True) AND ((Max(adhésion.année)) 10)) OR
(((adhérents.retraité)=True) AND ((Max(adhésion.année)) 11))
ORDER BY adhérents.Nom;
Le 13/02/2011 17:17, Michel__D a écrit :
bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm
l'option "distinct"
Comme ça :
http://cjoint.com/?0cnreLyNSdK
J'aimerais bien voir le SQL de la requête car je pense que tu n'as pas
besoin de "DISTINCT".
Tu sais je ne suis pas un Pro, sinon je ne poserai pas ce genre de
question.
Avant j'allais me faire aider sur les forum Microsoft, mais il ne
doivent plus exister ?
Comme ça :
SELECT DISTINCT adhérents.Titre, adhérents.Prénom, adhérents.Nom,
adhérents.Adresse1, adhérents.Adresse2, adhérents.[Code Postal],
adhérents.Ville, adhérents.retraité, Max(adhésion.année) AS MaxDeannée
FROM adhérents INNER JOIN adhésion ON adhérents.refadherent =
adhésion.refadherent
GROUP BY adhérents.Titre, adhérents.Prénom, adhérents.Nom,
adhérents.Adresse1, adhérents.Adresse2, adhérents.[Code Postal],
adhérents.Ville, adhérents.retraité
HAVING (((adhérents.retraité)=True) AND ((Max(adhésion.année)) 09)) OR
(((adhérents.retraité)=True) AND ((Max(adhésion.année)) 10)) OR
(((adhérents.retraité)=True) AND ((Max(adhésion.année)) 11))
ORDER BY adhérents.Nom;
Le 13/02/2011 17:17, Michel__D a écrit :bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm
l'option "distinct"
Comme ça :
http://cjoint.com/?0cnreLyNSdK
J'aimerais bien voir le SQL de la requête car je pense que tu n'as pas
besoin de "DISTINCT".
Tu sais je ne suis pas un Pro, sinon je ne poserai pas ce genre de
question.
Avant j'allais me faire aider sur les forum Microsoft, mais il ne
doivent plus exister ?
Comme ça :
SELECT DISTINCT adhérents.Titre, adhérents.Prénom, adhérents.Nom,
adhérents.Adresse1, adhérents.Adresse2, adhérents.[Code Postal],
adhérents.Ville, adhérents.retraité, Max(adhésion.année) AS MaxDeannée
FROM adhérents INNER JOIN adhésion ON adhérents.refadherent =
adhésion.refadherent
GROUP BY adhérents.Titre, adhérents.Prénom, adhérents.Nom,
adhérents.Adresse1, adhérents.Adresse2, adhérents.[Code Postal],
adhérents.Ville, adhérents.retraité
HAVING (((adhérents.retraité)=True) AND ((Max(adhésion.année)) 09)) OR
(((adhérents.retraité)=True) AND ((Max(adhésion.année)) 10)) OR
(((adhérents.retraité)=True) AND ((Max(adhésion.année)) 11))
ORDER BY adhérents.Nom;
Normalement le SQL suivant devrait fournir le même résultat :
SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2, T1.[Code
Postal], T1.Ville, T1.[retraité], Max(T2.[année]) AS MaxDeannée
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2 ON T1.refadherent > T2.refadherent
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING T1.[retraité]=True AND Max(T2.[année])> 09 AND
Max(T2.[année])< 11
ORDER BY T1.Nom;
Normalement le SQL suivant devrait fournir le même résultat :
SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2, T1.[Code
Postal], T1.Ville, T1.[retraité], Max(T2.[année]) AS MaxDeannée
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2 ON T1.refadherent > T2.refadherent
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING T1.[retraité]=True AND Max(T2.[année])> 09 AND
Max(T2.[année])< 11
ORDER BY T1.Nom;
Normalement le SQL suivant devrait fournir le même résultat :
SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2, T1.[Code
Postal], T1.Ville, T1.[retraité], Max(T2.[année]) AS MaxDeannée
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2 ON T1.refadherent > T2.refadherent
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING T1.[retraité]=True AND Max(T2.[année])> 09 AND
Max(T2.[année])< 11
ORDER BY T1.Nom;
Le 13/02/2011 18:35, Michel__D a écrit :Normalement le SQL suivant devrait fournir le même résultat :
SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2, T1.[Code
Postal], T1.Ville, T1.[retraité], Max(T2.[année]) AS MaxDeannée
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2 ON T1.refadherent >> T2.refadherent
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING T1.[retraité]=True AND Max(T2.[année])> 09 AND
Max(T2.[année])< 11
ORDER BY T1.Nom;
Cela dit, s'il s'agit juste de connaître le nom des adhérents d'au moins
une des trois dernières années, on peut écrire :
SELECT DISTINCT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année])< 11
ORDER BY T1.Nom;
S'il s'agit par contre de connaître le nom des gens qui ont été adhérents
les trois dernières années (qui ont payé les trois dernières cotisations,
quoi), on écrira plutôt :
SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année])< 11
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING Count(T2.[Année])=3
ORDER BY T1.Nom;
Le 13/02/2011 18:35, Michel__D a écrit :
Normalement le SQL suivant devrait fournir le même résultat :
SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2, T1.[Code
Postal], T1.Ville, T1.[retraité], Max(T2.[année]) AS MaxDeannée
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2 ON T1.refadherent >> T2.refadherent
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING T1.[retraité]=True AND Max(T2.[année])> 09 AND
Max(T2.[année])< 11
ORDER BY T1.Nom;
Cela dit, s'il s'agit juste de connaître le nom des adhérents d'au moins
une des trois dernières années, on peut écrire :
SELECT DISTINCT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année])< 11
ORDER BY T1.Nom;
S'il s'agit par contre de connaître le nom des gens qui ont été adhérents
les trois dernières années (qui ont payé les trois dernières cotisations,
quoi), on écrira plutôt :
SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année])< 11
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING Count(T2.[Année])=3
ORDER BY T1.Nom;
Le 13/02/2011 18:35, Michel__D a écrit :Normalement le SQL suivant devrait fournir le même résultat :
SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2, T1.[Code
Postal], T1.Ville, T1.[retraité], Max(T2.[année]) AS MaxDeannée
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2 ON T1.refadherent >> T2.refadherent
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING T1.[retraité]=True AND Max(T2.[année])> 09 AND
Max(T2.[année])< 11
ORDER BY T1.Nom;
Cela dit, s'il s'agit juste de connaître le nom des adhérents d'au moins
une des trois dernières années, on peut écrire :
SELECT DISTINCT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année])< 11
ORDER BY T1.Nom;
S'il s'agit par contre de connaître le nom des gens qui ont été adhérents
les trois dernières années (qui ont payé les trois dernières cotisations,
quoi), on écrira plutôt :
SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année])< 11
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING Count(T2.[Année])=3
ORDER BY T1.Nom;
J'ai essayé les deux, mais elles me donnent un message d'erreur.
L'important c'est que la première fonctionne avec la condition MAX.
Merci à tout les deux.
J'ai essayé les deux, mais elles me donnent un message d'erreur.
L'important c'est que la première fonctionne avec la condition MAX.
Merci à tout les deux.
J'ai essayé les deux, mais elles me donnent un message d'erreur.
L'important c'est que la première fonctionne avec la condition MAX.
Merci à tout les deux.
Le 13/02/2011 20:36, Post Scriptum a écrit :J'ai essayé les deux, mais elles me donnent un message d'erreur.
L'important c'est que la première fonctionne avec la condition MAX.
Merci à tout les deux.
Effectivement, il y avait une parenthèse en trop dans chacune des requêtes.
Mille excuses.
db
SELECT DISTINCT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année]< 11
ORDER BY T1.Nom;
SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année]< 11
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING Count(T2.[année])=3
ORDER BY T1.Nom;
Le 13/02/2011 20:36, Post Scriptum a écrit :
J'ai essayé les deux, mais elles me donnent un message d'erreur.
L'important c'est que la première fonctionne avec la condition MAX.
Merci à tout les deux.
Effectivement, il y avait une parenthèse en trop dans chacune des requêtes.
Mille excuses.
db
SELECT DISTINCT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année]< 11
ORDER BY T1.Nom;
SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année]< 11
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING Count(T2.[année])=3
ORDER BY T1.Nom;
Le 13/02/2011 20:36, Post Scriptum a écrit :J'ai essayé les deux, mais elles me donnent un message d'erreur.
L'important c'est que la première fonctionne avec la condition MAX.
Merci à tout les deux.
Effectivement, il y avait une parenthèse en trop dans chacune des requêtes.
Mille excuses.
db
SELECT DISTINCT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année]< 11
ORDER BY T1.Nom;
SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année]< 11
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING Count(T2.[année])=3
ORDER BY T1.Nom;