从三个相关表计算值,不使用连接或联合

Ash*_*ada 1 sql-server

我在 SQL Server 数据库上有一个简单的基本三个表: 在此处输入图片说明

需要的是获得可用数量,而不使用计算的连接或联合

可用数量 = 项目期初余额 - 已交付项目 + 已接收项目

欢迎任何想法。

Pau*_*ite 13

似乎要求您使用相关子查询编写查询,例如:

SELECT
    IOB.ItemID,
    IOB.Descript,
    IOB.Quantity +
    (
        -- Total received for this item
        SELECT ISNULL(SUM(IR.Quantity), 0)
        FROM dbo.ItemsReceived AS IR
        WHERE IR.ItemID = IOB.ItemID
    )
    -
    (
        -- Total delivered for this item
        SELECT TotalDelivered = ISNULL(SUM(ID.Quantity), 0)
        FROM dbo.ItemsDelivered AS ID
        WHERE ID.ItemID = IOB.ItemID
    )
FROM dbo.ItemsOpeningBalance AS IOB;
Run Code Online (Sandbox Code Playgroud)

SQLFiddle Demo

如果您使用的是 SQL Server 2005 或更高版本,您也可以使用APPLY(横向或相关连接),但我怀疑这会被视为不符合练习的精神。以下实际上需要 SQL Server 2008 或更高版本,因为它(无缘无故地)使用GROUP BY ().

SELECT
    IOB.ItemID,
    IOB.Descript,
    QuantityAvailable =
        IOB.Quantity +
        ISNULL(ItemsReceived.Quantity, 0) -
        ISNULL(ItemsDelivered.Quantity, 0)
FROM dbo.ItemsOpeningBalance AS IOB
OUTER APPLY
(
    SELECT SUM(IR.Quantity)
    FROM dbo.ItemsReceived AS IR
    WHERE IR.ItemID = IOB.ItemID
    GROUP BY ()
) AS ItemsReceived (Quantity)
OUTER APPLY 
(
    SELECT SUM(ID.Quantity)
    FROM dbo.ItemsDelivered AS ID
    WHERE ID.ItemID = IOB.ItemID
    GROUP BY ()
) AS ItemsDelivered (Quantity);
Run Code Online (Sandbox Code Playgroud)

SQLFiddle Demo