これはあなたのためにそれを取得する必要があります。トリックは、各セットを事前に照会することであり、ほとんどの場合、アイテム/バッチの組み合わせごとに1つのレコードがあります。そうでない場合、いずれかのテーブルに複数の値がある場合、デカルトの結果が得られます。アイテムテーブルから始まって、これらはレコードを有することが保証されるが、トランザクションテーブルは前記アイテムの販売を決して有することができない。このようにして、項目事前集約問合せが最初に行われ、次いで、最大1:1の比率のレコードを有するすべてのトランザクションの合計と比較される。しかし、項目/バッチに対応するトランザクションがない場合、NVL()はゼロの値を返しますが、000000に設定します。最初のレコードにNULL値がある場合は、単一の0で。
select;
TmpItem.ItemCode,;
TmpItem.BatchNumber,;
TmpItem.SumQ as Qty,;
cast(NVL(TmpTrans.SumUsed, 0) as int) as QtyUsed,;
TmpItem.SumQ - NVL(TmpTrans.SumUsed, 0) as Balance;
from ;
(select ItemCode, BatchNumber, SUM(Qty) as SumQ;
FROM ItemTable;
GROUP BY 1, 2) TmpItem;
LEFT JOIN;
(select ItemCode, BatchNumber, SUM(QtyUsed) as SumUsed;
FROM TransTable;
GROUP BY 1, 2) TmpTrans;
ON TmpItem.ItemCode = TmpTrans.ItemCode;
AND TmpItem.BatchNumber = TmpTrans.BatchNumber
別個のものです。すなわち:QtyUsedとしてキャスト(NVL(TmpTrans.SumUsed、0)をintとして) –