J'essaie de renvoyer les 4 dernières années de données d'un ID, si elles existent. Le tableau (appelez-le A_TABLE) ressemble à ceci: ID, Année, Val#Erreur apparaissant dans plusieurs instructions LEFT JOIN Requête d'accès lorsque la valeur doit être NULL
L'idée derrière la requête est la suivante: pour chaque ID/Année dans le tableau, LEFT JOIN avec Année-1, Année-2 et Année -3 (pour obtenir 4 années de données), puis retourner Val pour chaque année. Voici le SQL:
SELECT a.ID, a.year AS [Year], a.Val AS VAL,
a1.year AS [Year-1], a1.Val AS [VAL-1],
a2.year AS [Year-2], a2.Val AS [VAL-2],
a3.year AS [Year-3], a3.Val AS [VAL-3]
FROM (
([A_TABLE] AS a
LEFT JOIN [A_TABLE] AS a1 ON (a.ID = a1.ID) AND (a.year = a1.year+1))
LEFT JOIN [A_TABLE] AS a2 ON (a.ID = a2.ID) AND (a.year = a2.year+2))
LEFT JOIN [A_TABLE] AS a3 ON (a.ID = a3.ID) AND (a.year = a3.year+3)
Le problème est que, pour des années précédentes où il n'y a pas de données (par exemple, année 1), je vois « #Erreur » dans la colonne VAL appropriée (par exemple, [VAL-1 ]). La chose étrange est, je vois le "nul" attendu dans la colonne Année (par exemple, [YEAR-1]).
Certaines données de l'échantillon:
ID YEAR VAL
Dave 2004 1
Dave 2006 2
Dave 2007 3
Dave 2008 5
Dave 2009 0
sorties comme celle-ci:
ID YEAR VAL YEAR-1 VAL-1 YEAR-2 VAL-2 YEAR-3 VAL-3
Dave 2004 1 #Error #Error #Error
Dave 2006 2 #Error 2004 1 #Error
Dave 2007 3 2006 2 #Error 2004 1
Dave 2008 5 2007 3 2006 2 #Error
Dave 2009 0 2008 5 2007 3 2006 2
Est-ce que sens? Pourquoi est-ce que j'obtiens la valence NULL appropriée pour les ANNÉES inexistantes, mais une #Erreur pour les VALs non-existantes?
(Ceci est Access 2000. Les instructions conditionnelles comme "IIf (a1.val est nul, -999, a1.val)" ne semble pas faire quoi que ce soit.)
EDIT: Il se trouve que les erreurs sont en quelque sorte causés par le fait que A_TABLE est en fait une requête. Lorsque je place toutes les données dans un tableau et exécute la même requête, tout se présente comme il se doit. Merci à tous pour l'aide.
J'ai essayé cette requête dans Access 2000 et 2010 en utilisant les exemples de données et en réglant year et val comme entier long. Je n'ai pas d'erreur, seulement des zéros. – Fionnuala