Bonjour,
C'est compliqué !
Il faudrait je pense partir d'une table T_Mois(IndMois) contenant les numéros des mois (1,2,3,...,12).
Ensuite, si vous souhaitez avoir dans votre résultat tous les mois de l'année, il faudrait construire une requête R_EquipementMois, basée sur les tables T_Mois et T_Equipement :
1 2
| SELECT T_Equipement.NomEquipement, T_Mois.IndMois, CDate(DateSerial(Year(Date()),[IndMois],1)) AS Mois
FROM T_Mois, T_Equipement; |
* Ici je suppose que vous disposez d'une table T_Equipement(NomEquipement,...)
Enfin, il faudrait construire une requête basé sur la table Vibrations et la requête R_EquipementMois, comportant une sous-requête :
1 2
| SELECT R_EquipementMois.NomEquipement, R_EquipementMois.Mois, T_VibrationEquipement.Niveau_de_vibration, IIf(Not IsNull([Niveau_De_Vibration]),[Niveau_De_Vibration],(select [Niveau_de_Vibration] from T_VibrationEquipement T1 where (T1.Equipement=NomEquipement) and [Date_De_Rapport] in (select Max([Date_De_Rapport]) from T_VibrationEquipement T2 where (T2.Equipement=NomEquipement) and (T2.[Date_De_Rapport]<=[Mois])))) AS Niveau_Vibration
FROM R_EquipementMois LEFT JOIN T_VibrationEquipement ON (R_EquipementMois.Mois = T_VibrationEquipement.Date_De_Rapport) AND (R_EquipementMois.NomEquipement = T_VibrationEquipement.Equipement); |
* Ici je suppose que votre table se nomme T_VibrationEquipement.
* La sous-requête :
(select [Niveau_de_Vibration] from T_VibrationEquipement T1 where (T1.Equipement=NomEquipement) and [Date_De_Rapport] in (select Max([Date_De_Rapport]) from T_VibrationEquipement T2 where (T2.Equipement=NomEquipement) and (T2.[Date_De_Rapport]<=[Mois])))) AS Niveau_Vibration
Ramène le niveau de vibration de l'équipement pour le dernier mois passé, si pour ce mois il n'y a pas eu de mesure.
A adapter,
Cdlt,
Partager