Update语句中使用聚合函数Sum

本文介绍了一种使用SQL更新表中累加字段的方法。通过连接子查询与目标表,并利用ISNULL处理空值情况,确保所有记录都能被正确更新。此方案解决了因两表记录数量不匹配导致的部分数据遗漏问题。
表warehousestorage
WarehouseIDAmount
1100
1100
1100
1100
1100
1100
1100
1100
128
10
1100
414788
4100
4100
4100
4100
4100
4100d
1100

表warehouse
WarehouseIDUsingCapacity
11028
20
30
415388
50

表warehouse中的UsingCapacity是表warehousestorage对应项的累加值

SQL语句:
update warehouse set UsingCapacity = c.amount
from (select Sum(amount) as 'amount' , warehouseid from warehousestorage group by warehouseid) c, warehouse
where warehouse.warehouseid = c.warehouseid


运行后,统计值正确。不过又发现一个问题,因为表warehousestorage累加后,只有2项,而表warehouse有5项
,上述代码只更新了WareHouseID=1,4的2项,其他并没有更新。
所以代码需要修改:
update warehouse set UsingCapacity = d.amount
from
(
 select wh.warehouseid, isnull(c.amount,0) as 'amount' from
 (select Sum(amount) as 'amount' , warehouseid from warehousestorage group by warehouseid) c right join warehouse wh
 on c.warehouseid = wh.warehouseid
) d,warehouse
where warehouse.warehouseid = d.warehouseid

修改后,可以正常更新其余的几项。

转载于:https://www.cnblogs.com/yushiro/archive/2006/09/20/509793.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值