如何用MS Access将表1的行映射为表2的列名?
在MS Access中用查询替换列编码为正式名称的方法
静态解决方案(编码固定时)
如果列编码不会变动,直接在SELECT语句里给列指定对应别名即可,这是最直接的方法:
SELECT ID, A AS Apples, B AS Bananas FROM 表2;
执行该查询后,返回结果的列名就会替换为表1中的正式名称,和你期望的输出完全一致。
动态解决方案(编码可能变动时)
若表1的编码映射会新增或修改,手动修改SQL效率太低,可以用VBA自动生成查询:
- 打开Access的VBA编辑器(按Alt+F11)
- 插入新模块,粘贴以下代码:
Sub 生成动态列名查询() Dim 数据库对象 As DAO.Database Dim 记录集 As DAO.Recordset Dim SQL语句 As String Dim 别名片段 As String Set 数据库对象 = CurrentDb() SQL语句 = "SELECT ID" ' 从表1读取编码与名称的映射 Set 记录集 = 数据库对象.OpenRecordset("SELECT 列编码, 列名称 FROM 表1") Do While Not 记录集.EOF ' 处理含特殊字符的列名/编码,用方括号包裹避免语法错误 别名片段 = ", [" & 记录集!列编码 & "] AS [" & 记录集!列名称 & "]" SQL语句 = SQL语句 & 别名片段 记录集.MoveNext Loop 记录集.Close SQL语句 = SQL语句 & " FROM 表2;" ' 覆盖或创建名为「动态列名查询」的查询对象 On Error Resume Next 数据库对象.QueryDefs.Delete "动态列名查询" On Error GoTo 0 数据库对象.CreateQueryDef "动态列名查询", SQL语句 ' 打开生成的查询查看结果 DoCmd.OpenQuery "动态列名查询" ' 释放资源 Set 记录集 = Nothing Set 数据库对象 = Nothing End Sub
- 运行该宏(按F5),即可自动生成包含正确列名的查询并打开。
注意事项
- 上述代码仅会包含表1中存在映射的列;若需保留表2中未映射的列,需额外修改代码遍历表2的所有字段并匹配映射。
- 若列编码或名称包含空格、特殊字符,必须用方括号
[]包裹,避免SQL语法错误。
内容的提问来源于stack exchange,提问作者warrenjb
相关产品推荐
相关产品推荐

