现在有这样一个需求,将A表中的汇总结果,用于更新B表中的字段。
select count(*) as c,sum(xxx) as s from A where yyy=zzz;
update B set x=c,y=s where z=zzz;
A中的汇总结果是有多条,多列的,对应B中也是有多条,多列的,但不是一一对应的关系。
实现这个需求可以用存储过程。
1. A表中是以yyy字段作为汇总条件,首选筛选出yyy字段的所有值(去重复)
select distinct yyy from A;
2.B表中z字段与A表中的yyy字段是对应的,更新B中的字段需要遍历(select distinct yyy from A)的结果集,以此为更新的条件。
DECLARE @x INT,@y FLOAT,@zzz nvarchar(255)=''
DECLARE rs CURSOR LOCAL SCROLL FOR
select DISTINCT yyy from A
OPEN rs
FETCH NEXT FROM rs INTO @zzz
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @x=COUNT(*),@y=SUM(xxx) FROM A where yyy=@zzz;
UPDATE B set x=@x,y=@y where z=@zzz;
FETCH NEXT FROM rs INTO @zzz
END
CLOSE rs