内部結合(暗黙的)を使用して、受信と配信を組み合わせました。これは、受信されたが配信されなかったインクコードが結果から除外されることを意味します。
インクの配信にはインクレシートが必要であると想定できる場合(受け取っていないものは配信できないという前提に基づいて)、次のようにtblInkReceivingで内部結合を使用できます。
SELECT r.inkcode,
SUM(r.quantity) AS Stock-In,
ISNULL(SUM(d.quantity), 0) AS Stock-out,
SUM(r.quantity) - ISNULL(SUM(d.quantity), 0) AS Stock-Balance
FROM Tblinkreceiving r LEFT JOIN Tblinkdelivery d ON r.inkcode = d.inkcode
GROUP BY r.inkcode
左結合は、右(d)の一致するレコードを含む、左(r)のすべてのレコードを返します。dに一致するレコードがない場合(つまり、そのインクコードのインク配信がない場合)、それらの行の値はnullになります。
インクを受け取ってからしか配信できないと想定できない場合は、インクテーブル(つまり、インクコードが主キーであるテーブル)にもリンクするか、すべてのインクコードを結合する必要があります。受信テーブルと配信テーブルで、それにリンクします。
;WITH cte AS (SELECT inkcode FROM Tblinkreceiving
UNION
SELECT inkcode FROM Tblinkdelivery)
SELECT cte.inkcode,
SUM(r.quantity) AS Stock-In,
ISNULL(SUM(d.quantity), 0) AS Stock-out,
SUM(r.quantity) - ISNULL(SUM(d.quantity), 0) AS Stock-Balance
FROM cte LEFT JOIN Tblinkreceiving r ON cte.ink_code = r.ink_code
LEFT JOIN Tblinkdelivery d ON cte.inkcode = d.inkcode
GROUP BY cte.inkcode