A similar but different and much poorer approach to Paul's would be to compute the value as scalars and then do your calculation.
DECLARE
@QuantityOpening int
, @QuantityDelivered int
, @QuantityReceived int
, @ItemID int = 1;
WITH ItemsOpeningBalance(ItemID, Quantity) AS
(
SELECT
*
FROM
(
VALUES
(1, 10)
, (2, 20)
) D(a,b)
)
, ItemsDelivered(SalesOrderID, ItemID, Quantity) AS
(
SELECT
*
FROM
(
VALUES
(100, 1, 2)
, (1000, 1, 3)
, (200, 2, 100)
) D(a,b,c)
)
, ItemsReceived(PurchaseOrderID, ItemID, Quantity) AS
(
SELECT
*
FROM
(
VALUES
(10000, 1, 5)
, (20000, 2, 100)
) D(a,b,c)
)
-- Watch this pattern
SELECT
@QuantityOpening = COALESCE(
(
SELECT
SUM(IOB.Quantity) AS StartingQuantity
FROM
ItemsOpeningBalance AS IOB
WHERE
IOB.ItemID = @ItemID
), 0)
, @QuantityDelivered = COALESCE(
(
SELECT
SUM(ID.Quantity) AS StartingQuantity
FROM
ItemsDelivered AS ID
WHERE
ID.ItemID = @ItemID
), 0)
,@QuantityReceived = COALESCE(
(
SELECT
SUM(IR.Quantity) AS StartingQuantity
FROM
ItemsReceived AS IR
WHERE
IR.ItemID = @ItemID
), 0);
SELECT
@QuantityOpening - @QuantityDelivered + @QuantityReceived AS TotalAmount;