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 を返します (下の写真を参照)。

最初の選択の戻り値:

ここに画像の説明を入力

2 番目の select の戻り値:

ここに画像の説明を入力

MS アクセスの結果:

ここに画像の説明を入力

SQL サーバーの結果:

ここに画像の説明を入力


MS Access で動作させるにはどうすればよいですか?

4

1 に答える 1

1

これは単なる推測ですが、実際には必要のない行の該当する列のnullと関係がある可能性があります。

変更を提案する

     SELECT Sum([Cptotal]) AS DownTime,

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

Accessでは、Str(...)の代わりに常にCStr(...)を使用します

これとは別に、苦痛かもしれませんが、左結合されたコンポーネントを別のクエリに変換するか、クエリを使用しない場合は、このデータを使用して一時テーブルを作成し、元のクエリに結合したままにすることをお勧めします。

于 2012-08-09T05:13:15.360 に答える