You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Power Query中针对多份Access数据库执行自定义SQL语句(无需VBA)

解决方法:Power Query中用统一SQL查询多个同结构Access数据库

1. 集中存储SQL查询语句

在当前Excel工作簿新建一个工作表(比如命名为SQL_Config),在A1单元格写入你的4表关联SQL语句,示例:

SELECT 
    t1.ID, t1.Name,
    t2.Details,
    t3.Status,
    t4.Category
FROM Table1 t1
INNER JOIN Table2 t2 ON t1.ID = t2.RefID
INNER JOIN Table3 t3 ON t1.ID = t3.RefID
INNER JOIN Table4 t4 ON t1.ID = t4.RefID

选中A1单元格,点击公式选项卡→定义名称,给这个单元格命名为CoreQuery,方便Power Query读取。

2. 创建Power Query自定义函数

打开Power Query编辑器,点击主页→新建源→空白查询,将查询重命名为fn_FetchAccessData,在公式栏替换为以下M代码:

(filePath as text) =>
let
    // 读取预先定义的SQL语句
    SQL_Statement = Excel.CurrentWorkbook(){[Name="CoreQuery"]}[Content]{0}[Column1],
    // 建立Access数据库连接
    Access_Connection = OleDb.DataSource(filePath, [Provider="Microsoft.ACE.OLEDB.12.0"]),
    // 执行SQL查询并返回结果
    Query_Result = Access_Connection{[Schema="", Item=SQL_Statement]}[Data]
in
    Query_Result

注:需对应Office位数安装Microsoft ACE OLEDB驱动(32位Office装32位驱动,64位装64位驱动)。

3. 批量调用函数获取4个数据库的数据

回到Power Query编辑器,新建空白查询,输入以下代码(替换为你的4个MDB文件路径):

let
    // 定义4个Access文件路径
    File_Paths = {
        "C:\Data\DB1.mdb",
        "C:\Data\DB2.mdb",
        "C:\Data\DB3.mdb",
        "C:\Data\DB4.mdb"
    },
    // 对每个路径调用自定义函数
    All_Results = List.Transform(File_Paths, each fn_FetchAccessData(_)),
    // 给每个数据集添加来源标识(方便对比)
    Add_Source_Tag = List.Zip({All_Results, File_Paths}) |> List.Transform(
        (x) => Table.AddColumn(x{0}, "Source_DB", each Text.From(x{1}))
    ),
    // 合并为单表(也可选择分别加载每个数据集)
    Combined_Table = Table.Combine(Add_Source_Tag)
in
    Combined_Table

完成后可将结果加载到Excel工作表,直接对比4个数据库的查询结果。

维护说明

后续修改SQL时,直接编辑SQL_Config工作表A1单元格的内容,刷新Power Query即可,所有关联查询会自动同步更新,无需逐个修改。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:40:30