2

以下代码适用于 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 时,它没有提供添加任何表的选项 - 这使得尝试选项变得相当困难。
为什么 ?

4

1 回答 1

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
于 2015-11-26T21:34:32.237 回答