this question类似,我有这个错误,我无法解决 .

情况如下:

我们在Access 2003下有一个应用程序前端,其中包含来自SQL Server 2008 R2的链接表 .

我们有一个表Vehicule(immat,secteur)和一个表Vehicule_suivi_km(immat,date,km) . 我们的车辆以[immat]作为主键存储在[Vehicule]表中,其公里记录存储在[Vehicule_suivi_km]表中,[immat] [date]作为主键 .

现在我必须创建一年的活动摘要 . 我做了如下:

查询创建[MO km max 2016]:

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;

这段代码在#01/01/2017#之前为我提供了最新的公里记录 .

我2017年又做了[MO km max 2017]:

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;

现在我想创建一个查询,加入这两个表,并从2017年的公里减去2016年的公里[MO km今年]:

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;

如果我们在01/01/2017之后买了一辆车,我正在使用左连接 . 所以我使用Nz将空值转换为0(在SQL Server中它可能由COALESCE函数,但我使用Access进行查询)

我通过执行此查询得到以下错误(多部分标识符无法绑定[#4104]):

access_sql-server_4104

如果我使用INNER JOIN而不是LEFT JOIN我不会再出现此错误,但我只会在01/01/2017之前购买车辆的记录 .

这是一个主要的关键问题吗?我无法得到我做错的事 .

EDIT 1

错误消息说

[Microsoft] [SQL Server的ODBC驱动程序11] [SQL Server]无法绑定多部分标识符“vsk2016.immat” . 37000 4104 [Microsoft] [SQL Server的ODBC驱动程序11] [SQL Server]无法绑定多部分标识符“vsk2016.date” . (#4104)

EDIT 2

通过在[MO km max 2016]和[MO km max 2017]中添加GROUP BY,它解决了我的问题:

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))))
GROUP BY Vehicule.immat, vsk2017.[date], vsk2017.km
ORDER BY Vehicule.immat;

但我仍然想知道为什么我收到此错误消息 . 引擎是否不确定“immat”在我的查询结果中是唯一的,所以我必须添加GROUP BY关闭?