Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Requete union pour des frais de déplacements : doublons

2 réponses
Avatar
Kolele
Bonsoir à tous,
Dans ACCESS 2002, j'utilise une requête pour déterminer les trajets
kilométriques de profs visitant en entreprise leurs étudiants stagiaires
(pour ensuite calculer leurs frais de déplacement).
J'ai une requête sélection qui reprend l'identifiant du prof [CléPersonnel],
l'identifiant du stage [CléStageElève], la date de visite de son déplacement
[DateVisiteProf], la commune de l'entreprise visitée[NomCommune], un ordre
des trajets lorsque le prof visite plusieurs entreprises le même jour
[OrdreTrajet].
Une jolie requête UNION (merci db sur ce forum) me permet :
1) de fixer la ville du lycée comme commune de départ, si c'est le premier
stagiaire visité du jour (OrdreTrajet=1). Sinon, la commune de départ du
trajet = la commune de l'entreprise du dernier stagiaire visité.
2) de faire revenir le prof au lycée le soir après les visites, en générant
un dernier déplacement.
Ça roule tout seul, c'est pur beurre… sauf si le prof visite le même jour
plusieurs élèves qui font leur stage dans la même entreprise. Auquel cas,
chaque élève visité va générer un trajet, alors n'aura pris sa voiture qu'une
seule fois ! Car en amont de la visite par le prof, il y a forcément
l'identifiant du stage [CléStageElève].
Comment retoucher la requête union ?
Merci de votre aide.

SELECT [CléPersonnel], [DateVisiteProf], [OrdreTrajet],
IIf([OrdreTrajet]=1, "THIAIS",
DLookUp("[NomCommune]","[11-PlannificationVisiteSousForm]","[CléPersonnel]="
& [CléPersonnel] & " and [DateVisiteProf]=#" & [DateVisiteProf] & "# and
[OrdreTrajet]=" & [OrdreTrajet]
-1)) AS CommuneDépart, [NomCommune] AS CommuneArrivée FROM
[11-PlannificationVisiteSousForm]

UNION SELECT [CléPersonnel], [DateVisiteProf], [OrdreTrajet]+1,
[NomCommune], "THIAIS"
FROM [11-PlannificationVisiteSousForm]D1
WHERE [OrdreTrajet]=(select max([OrdreTrajet]) from
[11-PlannificationVisiteSousForm]D2 WHERE D2.[CléPersonnel]=D1.[CléPersonnel]
and D2.[DateVisiteProf]=D1.[DateVisiteProf]);

--
Pierre.

2 réponses

Avatar
db
Kolele a écrit :
Bonsoir à tous,



Ça roule tout seul, c'est pur beurre… sauf si le prof visite le même jour
plusieurs élèves qui font leur stage dans la même entreprise. Auquel cas,
chaque élève visité va générer un trajet, alors n'aura pris sa voiture qu'une
seule fois ! Car en amont de la visite par le prof, il y a forcément
l'identifiant du stage [CléStageElève].
Comment retoucher la requête union ?
Merci de votre aide.

SELECT [CléPersonnel], [DateVisiteProf], [OrdreTrajet],
IIf([OrdreTrajet]=1, "THIAIS",
DLookUp("[NomCommune]","[11-PlannificationVisiteSousForm]","[CléPersonnel]="
& [CléPersonnel] & " and [DateVisiteProf]=#" & [DateVisiteProf] & "# and
[OrdreTrajet]=" & [OrdreTrajet]
-1)) AS CommuneDépart, [NomCommune] AS CommuneArrivée FROM
[11-PlannificationVisiteSousForm]

UNION SELECT [CléPersonnel], [DateVisiteProf], [OrdreTrajet]+1,
[NomCommune], "THIAIS"
FROM [11-PlannificationVisiteSousForm]D1
WHERE [OrdreTrajet]=(select max([OrdreTrajet]) from
[11-PlannificationVisiteSousForm]D2 WHERE D2.[CléPersonnel]Ñ.[CléPersonnel]
and D2.[DateVisiteProf]Ñ.[DateVisiteProf]);




Bonsoir,

Est-ce que l'ordre trajet est le même pour tous les stagiaires dans une
même entreprise ? Si oui, ça ne devrait pas poser de problème : la
requête UNION devrait sélectionner les enregistrements uniques (par
acquis de conscience, mettre éventuellement DISTINCT après le premier
SELECT).

db
Avatar
Kolele
Ok pour SELECT DISTINCT.
Je vais donner comme consignes aux utilisateurs de prendre le même n°
d'ordre de trajet. Je teste et je reviens.

Merci db !
--
Pierre.