我在 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)
如果您使用的是 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)