[英]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()
用于处理日志表中没有匹配项的情况。 为避免获得NULL
, NULL
变为0
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.