sql - SQL Server 2005 Express 中的 For 循环?

标签 sql database loops sql-server-2005-express

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

  • 表 1:存储所有产品以及设置时的库存总额
  • 表 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 中的每一个出现

最佳答案

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

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()就是处理log表中没有匹配到的情况。为了避免得到 NULL , NULL变成了 0 .

关于sql - SQL Server 2005 Express 中的 For 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17933716/

相关文章:

mysql - 连接表的 SQL 查询

sql - 创建外键是否意味着创建索引?

sql - Fluent Hibernate插入失败,无法将值NULL插入列 'Id',

sql - 查询以查找用户参与的所有消息

python - python中的简单forvalues循环?

mysql - 如何指定在 MySql 中的 select * 查询输出中仅显示某些特定字段?

mysql - 如何设计数据库表和关系

python - 如何从 Pandas 数据框创建 postgres 表?

java - Detection of Loops in Java Bytecode - 区分后端类型

javascript - NG-Repeat 生成包含动态类的列表