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

两表比对后找出不同的部分更新,很复杂的一种 sql2000 下
A表 数据关系 ys=yuan-yuan*zk-zr

id    yuan   ys    zk  zr
a001  100    70    0.2 10
b002  250    205   0.1 20
a002  200    160   0.1 20  

...
B表 数据关系
 A.yuan=sum(b.yuan)
 A.ys=sum(b.yuan-(b.yuan*a.zk+b.yuan*(a.zr/a.yuan)))
 b.yh=b.yuan*a.zk+b.yuan*(a.zr/a.yuan)---

id     code   yuan   ys    yh
a001   0001   30     30    0     ---未计算的,需更新部分
a001   0003   50     50    0     ---未计算的,需更新部分
a001   0002   20     20    0     ---未计算的,需更新部分
b002   0001   100    82    18
b002   0002   80     65.6  14.4
b002   0003   70     57.4  12.6
a002   0001   40     40    0     ---未计算的,需更新部分
a002   0002   60     60    0     ---未计算的,需更新部分
a002   0003   100    100   0     ---未计算的,需更新部分

...
update 后的B表  我想的是这样的更新条件,但语句不对
where A1.id=b.id and a1.ys<>sum(b.ys) ,再一个是两表关联后更新的语句也不能确定是否对。

id     code   yuan   ys    yh
a001   0001   30     21    9     
a001   0003   50     35    15     
a001   0002   20     14    6      
b002   0001   100    82    18
b002   0002   80     65.6  14.4
b002   0003   70     57.4  12.6
a002   0001   40     32    8     
a002   0002   60     48    12     
a002   0003   100    80    20     

...
真的难啊,光整例子数据就半天!,谢谢高手的解答先!
------最佳解决方案--------------------
update b set b.yh=b.yuan*a.zk+b.yuan*(a.zr/a.yuan),
b.ys=b.yuan-(b.yuan*a.zk+b.yuan*(a.zr/a.yuan))
from a 
where a.id=b.id 
and a.ys<>(select SUM(ys) from b as tb where tb.id=a.id group by b.id)

------其他解决方案----------