sql服务器-SUM聚合函数和子查询-sql



我使用的是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

最新更新