1

我有一个使用 SQL Server 2005 Express 的程序,我需要一些帮助来循环遍历 2 个表来计算库存。

  • Table 1:在设置时将所有产品与库存总额一起存储
  • Table 2:存储针对表 1 中所有产品的交易

如何遍历表 2 中的所有项目并从表 1 计数中减去该数量?

如果我有这样的查询,那么我会获取每个产品的数据

SELECT 
     ii.ItemNum, ii.ItemName, ii.OzOnHand
FROM 
     dbo.InventoryItems ii
INNER JOIN 
     dbo.InventoryLog il ON ii.ItemNum = il.InvItemNum
WHERE 
     ii.active = 1

我需要从表 1 的总金额中减去表 2 中的每次出现

4

1 回答 1

4

这是连接聚合表的示例(我认为这是理解它的最佳方式):

SELECT ii.ItemNum, ii.ItemName, ii.OzOnHand, ii.OzOnHand - coalesce(il.cnt, 0)
FROM dbo.InventoryItems ii LEFT JOIN
     (select il.InvItemNum, sum(OzRemoved) as cnt
      from dbo.InventoryLog il
      group by il.InvItemNum
     ) il
     ON ii.ItemNum = il.InvItemNum
WHERE ii.active = 1;

子查询对日志中的所有内容进行分组并计算条目数。如果每个条目可能影响多个项目,那么您将使用类似的东西sum(cnt) as cnt而不是count(*).

然后,查询使用left outer join. 这种类型的连接确保所有库存项目都保留下来,即使是那些在日志中什么也没有的项目。最后,从设置中可用的计数中减去计数。coalesce()就是处理日志表中没有匹配的情况。为避免得到NULL,将NULL其变成了0

于 2013-07-29T20:39:40.520 回答