gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 22:00:17 26 4
gpt4 key购买 nike

我有一个使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com