两表列合并输出及Access多单位表拆分自动更新方案求助
Access数据拆分与自动同步方案
一、先确保原表「sample」有唯一索引ID
- 给「sample」表添加主键字段
ID(自动编号类型),作为所有新表的关联依据,确保数据同步时能对应到正确样本。
二、创建单位分组的查询(以%单位为例)
针对每个单位(%、ppm、ppb等)创建联合查询,合并同单位的不同表头数据,取非空值:
比如创建查询qry_samples_%,SQL语句如下:
SELECT ID, 'Si' AS Element, Nz(Si_%, Si_pct) AS Value FROM sample WHERE Nz(Si_%, Si_pct) IS NOT NULL UNION ALL SELECT ID, 'Au' AS Element, Nz(Au_%, Au_pct) AS Value FROM sample WHERE Nz(Au_%, Au_pct) IS NOT NULL -- 其他元素按此格式依次添加
- 解释:
Nz(A,B)函数会优先取A的值,如果A为空则取B,解决不同实验室表头差异导致的空值问题;UNION ALL合并所有元素的同单位数据;WHERE过滤掉该元素此单位全为空的行。
同理,创建qry_samples_ppm、qry_samples_ppb等查询,替换对应的字段(比如ppm对应Si_ppm、Au_ppm等)。
三、生成可同步的新表
如果需要物理表而非查询,可通过生成表查询创建,或设置宏执行「删除旧数据+追加新数据」的流程:
- 创建删除查询
qry_delete_samples_%,清空目标表:
DELETE * FROM samples_%
- 创建追加查询
qry_append_samples_%,将查询结果导入目标表:
INSERT INTO samples_% (ID, Element, Value) SELECT ID, Element, Value FROM qry_samples_%
重复此步骤,为每个单位表创建对应的删除和追加查询。
四、设置宏自动执行同步流程
- 打开Access的「宏设计」,创建新宏
macro_sync_samples:- 添加操作
OpenQuery,选择qry_delete_samples_%,设置「数据模式」为「编辑」 - 添加操作
OpenQuery,选择qry_append_samples_%,设置「数据模式」为「编辑」 - 按此顺序添加所有单位表的删除、追加查询操作
- 最后可添加
MsgBox操作,提示“数据同步完成”
- 添加操作
- 将导入.csv/.xlsx文件的宏与这个同步宏合并,或者在导入操作的末尾添加
RunMacro操作,选择macro_sync_samples,实现导入后自动同步。
五、注意事项
- 若新增元素(比如Cu、Fe等),需要同步更新对应的联合查询,添加该元素的UNION ALL语句
- 确保原表「sample」的字段名规范,比如元素+单位的命名规则,方便批量修改查询
- 测试时先备份数据,避免误删或数据覆盖
内容的提问来源于stack exchange,提问作者Mark Hotson
相关产品推荐
相关产品推荐

