繁体   English   中英

对于SQL Server 2005 Express中的循环?

[英]For Loop in SQL Server 2005 Express?

我有一个使用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的每个事件中减去表1的总金额

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

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东西sum(cnt) as cnt而不是count(*)

然后,查询使用left outer join 这种类型的连接可确保所有库存项目保留,即使日志中没有任何内容也是如此。 最后,从设置中可用的数量中减去计数。 coalesce()用于处理日志表中没有匹配项的情况。 为避免获得NULLNULL变为0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM