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