Access 2.0中使用Union Query统计人员A、B项总积分的需求
在Access 2.0中统计每位人员的A/B项总积分
要解决这个问题,核心思路是先把分散在两个列里的人员数据统一成相同结构,再分组求和。因为Access 2.0支持UNION查询,我们可以用这个特性来拆分并合并数据,最后汇总计算。
步骤1:用联合查询拆分原始数据
首先,假设你的原始表名叫MainTable,我们需要把表里的两部分人员信息拆分成统一的记录格式:
- 把
Title A和Credit A作为一组,B项积分设为0 - 把
Title B和Credit B作为另一组,A项积分设为0
用UNION ALL把这两部分合并,SQL语句如下:
SELECT [Title A] AS 姓名, [Credit A] AS A积分, 0 AS B积分 FROM MainTable UNION ALL SELECT [Title B] AS 姓名, 0 AS A积分, [Credit B] AS B积分 FROM MainTable;
这个查询会把每一行原始数据拆成两行,比如第一行James Sam 1 0会变成:
James, 1, 0Sam, 0, 0
步骤2:基于拆分结果汇总积分
接下来,我们对上面的联合查询结果按姓名分组,求和A、B项的积分。你可以直接把联合查询嵌套在汇总查询里:
SELECT 姓名, Sum(A积分) AS 总A积分, Sum(B积分) AS 总B积分 FROM ( SELECT [Title A] AS 姓名, [Credit A] AS A积分, 0 AS B积分 FROM MainTable UNION ALL SELECT [Title B] AS 姓名, 0 AS A积分, [Credit B] AS B积分 FROM MainTable ) AS SplitData GROUP BY 姓名;
如果你觉得嵌套SQL看起来复杂,也可以先把第一步的联合查询保存为一个单独的查询(比如命名为qrySplitData),然后再写汇总查询:
SELECT 姓名, Sum(A积分) AS 总A积分, Sum(B积分) AS 总B积分 FROM qrySplitData GROUP BY 姓名;
验证结果
拿你提供的测试数据来说,最终结果应该是这样的:
| 姓名 | 总A积分 | 总B积分 |
|---|---|---|
| James | 3 | 1 |
| Sam | 1 | 1 |
| Jason | 2 | 2 |
| Justin | 2 | 0 |
| Sara | 1 | 1 |
这个结果完全符合每个人的积分统计需求。
内容的提问来源于stack exchange,提问作者Jeff Harding
相关产品推荐
相关产品推荐

