如何创建Access查询合并两行同类grant经费数据为单行并求和?
创建可合并两行数据的Access查询方法
核心实现逻辑
当前合并需求本质是将同项目关联的两行记录(主编号19110、带后缀的子编号19110b)做聚合处理:
- 按照同项目的识别规则把关联行归为同一组
- 对组内的数值型预算字段做累加求和
- 对组内的文本字段(经费编号、分类)取主条目值作为最终展示结果
可直接运行的查询SQL
在Access的SQL查询视图中输入以下代码,替换实际表名即可执行:
SELECT Min(t.GrantNumber) AS GrantNumber, First(t.Category) AS Category, Sum(t.FedBudget) AS FedBudget, Sum(t.MatchBudget) AS MatchBudget FROM 你的实际表名 t GROUP BY Val(t.GrantNumber), t.Category;
逻辑说明
- 借助Access内置的
Val()函数提取GrantNumber字段的开头数字部分:Val("19110")和Val("19110b")的返回值均为19110,两个记录会被自动分到同一聚合组 - 对分组内的GrantNumber取最小值:字符串排序规则下"19110" < "19110b",最终输出的编号就是不带后缀的主编号19110,完全匹配期望的输出格式
- 对FedBudget、MatchBudget字段做求和计算,可自动合并两个条目的预算值(393861 + 106135 = 499996)
- 同组内Category字段本身值一致,取任意值即可得到正确的分类结果
注意事项
- 执行前请把SQL中的
你的实际表名替换为数据库中存储数据的真实表名 - 可以单独运行
SELECT Val(GrantNumber) FROM 你的实际表名,验证所有需要合并的条目提取的分组值一致 - 如果预算字段是带$符号的文本存储格式,需要把求和部分的代码替换为
Sum(Val(Replace(t.FedBudget,"$","")))、Sum(Val(Replace(t.MatchBudget,"$",""))),先去掉货币符号、转成数值再计算累加 - 该规则可自动适配后续出现的其他同类后缀(比如19110a、19110c)的合并需求
内容的提问来源于stack exchange,提问作者Barbara Booker
相关产品推荐
相关产品推荐

