我使用的是MS SQL Server,我有两个表。
Supply_list
sl_id(pk) supply_id(fk)* transaction_id Qty
1 14 872670099 3
2 15 872670100 5
3 16 872670101 1
4 16 872670105 4 <
- supply_id是舒适度表中supply_id的外键
供应
supply_id(pk) no_of_units
----------------------------
13 2
14 3
15 6
16 10
输出应该是supply_id,然后是可用单元的数量,该数量等于no_of_funits减去Qty。
输出
id units available
-------------------------
13 2
14 0 --> [1]
15 1
16 5 --> [2]
[1] 由于基于supply_ list表supply_id 14的数量为3
[2] 有两条记录包含supply_id 16,所以我们必须添加它们的数量,即4和1,所以我们有5。这5将从supply_id 16的no_of_units中减去,我们将得到可用单元的5。
- 您将外部JOIN列表表留给了父表
- 从父no_of_units值中减去列表Qty值的总和
- 如果没有列表行,请使用ISNULL
类似的东西
SELECT
S.supply_id,
S.no_of_units - ISNULL(SUM(SL.Qty), 0) AS [units available]
FROM
supply S
LEFT JOIN
supply_list SL ON S.supply_id = SL.supply_id
GROUP BY
S.supply_id, S.no_of_units
这使得聚合更加明显,但却是相同的查询
SELECT
S.supply_id,
S.no_of_units - ISNULL(SL.SumListQty, 0) AS [units available]
FROM
supply S
LEFT JOIN
(
SELECT supply_id, SUM(Qty) AS SumListQty
FROM supply_list
GROUP BY supply_id
) SL ON S.supply_id = SL.supply_id