0

以下SQL 查询不返回MS Access 中的 LEFT JOIN 的数据。

SELECT * FROM 
 (
 SELECT Operation_Part.PPC,
        Operation_Part.TargetOperationsPerHour as JPH,
        Operation_Part.Misc1 as [JPh Alt 1],
        STR(Operation_Part.SeqNr) as Sequence,
        Operation_Part.idPart,
        Operation_Part.idOperationPart, 
        Operation.OperationType as Operation,
        tblOperationType.OperationType as [Operation Type] 
 FROM tblOperationType 
   RIGHT JOIN (Operation INNER JOIN Operation_Part ON Operation.idOperation = Operation_Part.idOperation)
    ON tblOperationType.idOpType = Operation.OperationTID  
 WHERE Operation_Part.VsbLDq = 0
   AND Operation_Part.idPart <> 0  AND Operation_Part.idPart = 1271) 
 AS [AA]

 LEFT JOIN (SELECT Sum([Cptotal]) AS DownTime, 
            TransactionDetail.idPart, 
            STR(TransactionDetail.seq_number) as Sequence  
            FROM ([Transaction] INNER JOIN TransactionDetail ON [Transaction].idTransaction = TransactionDetail.idTransaction)  
           WHERE [Transaction].idTransactionType=29 
             AND TransactionDetail.WorkOrderNumber = 'PR23144'  
           GROUP BY TransactionDetail.idPart, STR(TransactionDetail.seq_number)) 
 AS [EE] 
 ON AA.idPart = EE.idPart AND EE.Sequence=AA.Sequence

在 SQL Server 中,查询确实根据需要返回 1.08 的停机时间值(见下图)。

首先选择返回:

在此处输入图像描述

第二次选择返回:

在此处输入图像描述

MS 访问结果:

在此处输入图像描述

SQL 服务器结果:

在此处输入图像描述


如何使它在 MS Access 中工作?

4

1 回答 1

1

这只是一个猜测,但它很可能与您并不真正想要的行的适用列中的空值有关。

建议你改

     SELECT Sum([Cptotal]) AS DownTime,

     SELECT Sum(IIf(IsNull([CpTotal]), 0, [CpTotal])) AS DownTime

在 Access 中,我总是使用 CStr(...) 而不是 Str(...)

除此之外,尽管可能很痛苦,但我建议将左连接组件转换为单独的查询,或者如果您不使用查询,则使用此数据构建一个临时表,然后将其左连接到原始查询中。

于 2012-08-09T05:13:15.360 回答