Bonjour,
J'obtiens cette erreur sans trop savoir pourquoi. Voici la situation :
Nous avons une application Front-end sous Access 2003 utilisant des tables liées d'un SQL Server 2008 R2.
Nous avons une table Vehicule(immat, secteur) et une table Vehicule_suivi_km(immat, date, km). Les véhicules de l'agence sont stockés dans la table Vehicule tandis que leurs relevés kilométriques sont stockés dans Vehicule_suivi_km. Dans Vehicule, immat est la clé primaire. Dans Vehicule_suivi_km, la clé primaire est immat + date.
Je dois maintenant dresser un bilan des km parcourus à l'année. J'ai donc fais comme ceci :
Création d'une requête [MO km max 2016] :
Ce code me renvoi donc une ligne par véhicule contenant son relevé kilomètrique le plus récent avant le 1er janvier 2017.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT Vehicule.immat, vsk2016.date, vsk2016.km FROM Vehicule INNER JOIN Vehicule_suivi_km AS vsk2016 ON Vehicule.immat=vsk2016.immat WHERE (((vsk2016.date)=(SELECT Max(date) FROM Vehicule_suivi_km WHERE (Vehicule_suivi_km.date<#01/01/17# And Vehicule_suivi_km.immat=vsk2016.immat)))) ORDER BY Vehicule.immat;
Je fais ensuite pareil pour les kilomètres de 2017 [MO km max 2017] :
Maintenant je souhaite créer une requête qui joint ces deux tables en soustrayant les kilomètres de 2016 à ceux de 2017 [MO km cette année] :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT Vehicule.immat, vsk2017.date, vsk2017.km FROM Vehicule INNER JOIN Vehicule_suivi_km AS vsk2017 ON Vehicule.immat=vsk2017.immat WHERE (((vsk2017.date)=(SELECT Max(date) FROM Vehicule_suivi_km WHERE (Vehicule_suivi_km.date<#01/01/18# And Vehicule_suivi_km.immat=vsk2017.immat)))) ORDER BY Vehicule.immat;
Je fais un left join car il est possible que nous ayons achetés des véhicules depuis le 01/01/2017. Le Nz est donc là pour remplacer les valeurs null renvoyées par le left join avec des 0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT [MO km max 2017].immat, [MO km max 2017].km-Nz([MO km max 2016].km,0) AS km FROM [MO km max 2017] LEFT JOIN [MO km max 2016] ON [MO km max 2017].immat = [MO km max 2016].immat;
J'obtiens alors l'erreur suivante de SQL Server mise en forme par Access :
Je ne comprend pas d'où vient cette erreur. Si je transforme le left join en inner join elle disparaît.
Est-ce un problème de clé primaire ou autre ? Quelqu'un pourrait-il m'éclairer sur le sujet ?
Merci de votre attention.
Partager