以下代码适用于Sage200。
SELECT bcs.BomReference
,bcs.DateTimeCosted
,bcs.TotalCost
FROM (
SELECT BomReference
,Max(DateTimeCosted) AS MaxDate
FROM NDM_Sage200.dbo.BomCostSession BomCostSession
GROUP BY BomReference
) AS ldc
INNER JOIN BomCostSession AS bcs ON bcs.BomReference = ldc.BomReference
AND bcs.DateTimeCosted = ldc.MaxDate
ORDER BY BomReference
当我尝试使用INNER JOIN将其扩展到另一个表以获取更多列(使用 BomReference )时,我收到错误消息:
无法添加表格(。
请参阅下面的修改代码示例;我必须使用2个连接来到我需要的表,但是无论我加入到工作代码中都有相同的错误。
SELECT bcs.BomReference, bcs.DateTimeCosted, bcs.TotalCost, BomBuildProduct.StockDescription
FROM (
SELECT BomReference,
Max(DateTimeCosted) AS MaxDate
FROM NDM_Sage200.dbo.BomCostSession BomCostSession
GROUP BY BomReference
) AS ldc
INNER JOIN
BomCostSession as bcs
ON bcs.BomReference = ldc.BomReference AND
bcs.DateTimeCosted = ldc.MaxDate
***** Fails when adding INNER JOIN here *****
INNER JOIN
BomBuildPackage
ON BomCostSession.BomBuildPackageID = BomBuildPackage.BomBuildPackageID
INNER JOIN
BomBuildProduct
ON BomBuildPackage.BomRecordID = BomBuildProduct.BomRecordID
ORDER BY BomReference
我做错了什么?我需要用几个表中的数据扩展查询
我也认为在有效的部分使用MSQuery时,它没有提供添加任何表的选项 - 这使得尝试选项变得相当困难。
为什么?
答案 0 :(得分:1)
MSQuery的问题在于它试图在它的设计视图中以图形方式显示您的查询,这对于简单查询是可行的,但对于通常生成无法添加表消息的复杂查询则不行。我发现的方法是将查询视为包装器查询中的一个大的子查询,这迫使MSQuery放弃设计视图并作为纯SQL文本工作。
另一个问题可能是,对于一个表,您有完整路径而不是其他表,对于包含它的表是否正确,是否需要在其他表上使用它。
以下是我认为你应该做出的改变的一个例子:
SELECT * FROM (
SELECT bcs.BomReference
,bcs.DateTimeCosted
,bcs.TotalCost
,BomBuildProduct.StockDescription
FROM
(SELECT BomReference
,Max(DateTimeCosted) AS MaxDate
FROM NDM_Sage200.dbo.BomCostSession BomCostSession
GROUP BY BomReference) AS ldc
INNER JOIN NDM_Sage200.dbo.BomCostSession AS bcs ON bcs.BomReference = ldc.BomReference
AND bcs.DateTimeCosted = ldc.MaxDate
INNER JOIN NDM_Sage200.dbo.BomBuildPackage ON BomCostSession.BomBuildPackageID = BomBuildPackage.BomBuildPackageID
INNER JOIN NDM_Sage200.dbo.BomBuildProduct ON BomBuildPackage.BomRecordID = BomBuildProduct.BomRecordID) x
ORDER BY BomReference