Lorsque nous examinons les mesurages de « com003 », nous voyons qu’ils sont deux.
Le premier 42 unités (kilomètres) pour l’activité4 (transport).
Le second 2 unités (heure_production) pour l’activité5 (production).
Afin que ces deux activités soient traitées individuellement, nous avons utilisé IF THEN ELSE.
Nous avons 7 activités qui doivent être traitées individuellement, et devons proposer 7 traitements
individuels.
Nous avons retenu la solution suivante.
Return sera suivi d’une expression IF posant comme condition que l’activité à traiter soit l’activité1.
Si il s’agit bien de l’activité1, l’expression THEN autorise le calcul de la requête.
La différence du traitement appliqué par « Return » comparativement aux deux requêtes
précédentes est que nous ne considérons plus les quantités de mesurage dans leur globalité, mais
individuellement pour chaque activité.
Nous ajoutons donc un prédicat: « @id_aktivite=”act1″ » .
for « $uo » in « $in » /client/commande/mesurage/@quantite
devient
for « $uo » in « $in » /client/commande/mesurage[@id_aktivite=”act1″]/@quantite
Si il ne s’agit pas de l’activité1, l’expression ELSE évalue s’il s’agit de l’activité2 au quel cas
l’expression THEN autorise le traitement.
L’évaluation se fera sur base du prédicat « @id_aktivite=”act2″ »
Et ce répétitivement jusqu’à l’activité6 au terme de laquelle il ne reste plus comme dernière
alternative que de traiter l’activité7.
L’entièreté de cette requête est imbriquée dans SUM( ), afin de sommer la séquence de résultats.
Nous reproduisons la requête complète ci-dessous.
Le résultat généré est cette fois de 147,748 (Euro).