日期:2014-05-17  浏览次数:20694 次

大神们进来下,求帮助
有一个A表, 金额是空,一个客户有唯一的一个批次
  客户  批次  金额
1 光大  2012  
2 农行  2013
3 建行  2014

有一个B表,一个客户可能有多个批次
  客户  批次  金额
1 光大  2012  100
2 光大  2013  140 
3 光大  2014  150
4 农行  2012  111


现在我查询A表,select 客户,批次 from A where 条件
结果为:
  客户 批次
1 光大  2012  
2 农行  2013
3 建行  2014

然后我现在想 通过这个查询的结果的每一行,去查询B表金额的总数,然后去通过客户,批次 更新A表的金额



刚刚可能我没说明白,在说一下
sql

------解决方案--------------------

update tableA  set 金额=(select sum(金额) from tableB tb where tb.客户=tableA.客户 and tb.批次=tableA.批次)

------解决方案--------------------
2005以上可用:
;
WITH    cte
          AS ( SELECT   客户 ,
                        批次 ,
                        SUM(金额) 金额
               FROM     b
               GROUP BY 客户 ,
                        批次
             )
    UPDATE  a
    SET     a.金额 = b.金额
    FROM    a
            INNER JOIN cte b ON a.客户 = b.客户
                                AND a.批次 = b.批次

------解决方案--------------------

update a set a.金额=b.money
from tbA as a cross apply 
(select sum(money)money from tbB as b where a.客户=b.客户 and a.批次=b.批次 group by b.客户,b.批次)as b 

1楼2楼都是正解,我的方法也可以,我跟2楼版主的一样,都需要2005以上版本才能运行
如果是2000的话可以考虑1楼的方法
------解决方案--------------------
如果是2000的话,可以把我那个with里面的语句先存到临时表,更新完删除即可。