最近忙于公司产品和项目,很有没有写博客了,碰巧今天遇上一个问题,纠结了比较久,在网上搜索了一些资料最终得出解决方案。

业务场景如下:

考生表tblUser:

标识列(Id)姓名(Name)总分(TotalScore)
1张三NULL
2李四NULL
3王五NULL

得分表tblScore:

考生标识列(UserId)姓名(Name)科目(Subject)得分(Score)
1张三数学86
1张三语文99
2李四数学98
2李四语文85
3王五数学
59
3王五语文51

我们需要使用SUM()和GROUP把附表B中的总分累加起来,赋值给主表A中的总分。

1. 先查询考生表中的数据,遍历所有考生,将考生总分查询出来,单条更新到考生表中。此方法执行效率很低下,遍历过程中会有N次数据库连接。

2. 在UPDATE语句中使用SUM()聚合函数,代码如下:

UPDATE tblUser
SET TotalScore=temp.AllScore
FROM (
    SELECT SUM(s.Score) AllScore,s.UserId
    FROM tblScore AS s 
    GROUP BY s.UserId  
) temp, tblUser
WHERE temp.UserId=tblUser.Id

执行成功!