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

这样的T-SQL语句怎么写,请赐教


      表A B ,A成绩表(id,name,xueke,chengji),学科为英语 语文 数学, B 总分平均分表(id ,name ,zongfen ,pingjunfen)


输入完表A后,根据ID自动计算总分和平均分,插入表B中。


------解决方案--------------------
insert into B总分平均分表(id ,name ,zongfen ,pingjunfen)
select id,name,sum(xueke),avg(xueke)
from A成绩表
group by id,name

------解决方案--------------------
修正:xueke-->chengji

insert into B总分平均分表(id ,name ,zongfen ,pingjunfen)
select id,name,sum(chengji),avg(chengji)
from A成绩表
group by id,name


------解决方案--------------------
INSERT INTO B表
(
id,
name,
zongfen,
pingjunfen
)
SELECT
id, 
name,
SUM(chengji),
CAST(AVG(1.0*chengji) AS DECIMAL(10,1))
FROM A表
GROUP BY id, name

------解决方案--------------------
想要自动的话写个触发器,如果有插入数据了,直接更新平均分数表就行了。
------解决方案--------------------
wwwwgou真细心啊,平均分数须考虑小数点:AVG(1.0*chengji)

------解决方案--------------------
帮楼主写了一个触发器,可以实现当A表中插入成绩数据时,B表可以自动更新总分和平均分。请在A表建立下面的触发器

CREATE TRIGGER [dbo].[tr_stat]
   ON  [dbo].[A]
   AFTER insert
AS 
BEGIN
    update table5 set zongfen=a.zongfen,pingjunfen=a.pingjunfen
    from
    (
select t.id,t.name,sum(chengji) as zongfen ,avg(chengji) as pingjunfen from
(
select inserted.* from inserted 
inner join B on inserted.id=B.id
union 
select A.* from A 
inner join B on A.id=B.id
)t group by t.id,t.name
    ) a inner join B on B.id=a.id