有三张表 A(SNO,GPA) 主键为SNO
B(SNO,CNO,TNO,POINT) 主键为(SNO,CNO,TNO) 外键为(SNO,CNO)
C(CNO,CREDIT) 主键为CNO
需求:一旦修改了POINT的值后 求相同SNO对应的 (POINT1*CREDIT1+POINT2+CREDIT2+.....)/(CREDIT1+CREDIT2+....)
如A中数据(s1,0)
B中数据为(s1,c1,t1,4.0),(s1,c2,t2,3.0)
C中数据为(c1,4),(c2,3),(c3,2)
则更新GPA=(4.0*4+3.0*3)/(4+3)
------解决方案--------------------
- SQL code
if objectproperty(object_id('B_UPD'),'IsTrigger')=1drop trigger B_UPDgocreate trigger B_UPDon Bfor updateasif update(POINT)begin update A set GPA=case when t.CREDIT=0 then 0 else t.PC/t.CREDIT end from ( select B.SNO,PC=sum(B.POINT*C.CREDIT), CREDIT=sum(C.CREDIT) from C,B,inserted i where C.CNO=B.CNO and B.SNO=i.SNO group by B.SNO )t where A.SNO=t.SNOendgo