读书人

两表比对后找到不同的部分更新,很复杂

发布时间: 2013-03-26 09:54:34 作者: rapoo

两表比对后找出不同的部分更新,很复杂的一种 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)

读书人网 >SQL Server

热点推荐