日期:2014-05-18  浏览次数:20473 次

求写一个触发器!
有三张表 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')=1
drop trigger B_UPD
go
create trigger B_UPD
on B
for update
as
if 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.SNO
end
go