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

Excel Power Query:先分组再合并多数据源数据表的实现方法

在Power Query中实现单查询内的「筛选→分组→左连」操作

完全可以在单个查询内完成,不需要预先创建分组后的独立查询,这和你熟悉的SQL子查询逻辑完全对应。

对应你提供的SQL示例的Power Query实现逻辑

你的SQL核心是左连一个经过分组聚合的子查询,在Power Query中可以通过嵌套转换步骤或者变量定义实现,无需拆分查询。

你的SQL示例回顾

select a.ID, b.value
from tableA a
   left outer join (select ID, SUM(value) as value
                    from tableB
                    group by ID)b on a.ID = b.ID

针对你的实际需求的具体实现

你的需求是:SQL客户表(query1)分别左连两个经过「筛选→分组」的Excel表(query2、query3),以下是两种单查询内的实现方式:

方式1:用变量定义预处理后的表(可读性更强)

这种方式类似SQL中给子查询起别名,变量仅在当前查询内有效,不会生成独立查询:

// 1. 加载SQL Server客户表
query1 = Sql.Database("你的SQL服务器地址", "目标数据库名", [Query="SELECT * FROM 客户表"]),

// 2. 对query2先筛选(对应SQL WHERE)再分组聚合(对应SQL GROUP BY + SUM)
processed_query2 = Table.Group(
    // 替换成你的实际筛选条件
    Table.SelectRows(Excel.Workbook(File.Contents("query2的Excel文件路径.xlsx")){0}[Data], each [你的筛选列] = "目标筛选值"),
    {"客户ID"}, // 分组字段,对应SQL GROUP BY ID
    {{"query2_汇总值", each List.Sum([需要求和的列]), type number}} // 聚合操作,对应SQL SUM(value)
),

// 3. 对query3执行同样的筛选+分组操作
processed_query3 = Table.Group(
    Table.SelectRows(Excel.Workbook(File.Contents("query3的Excel文件路径.xlsx")){0}[Data], each [你的筛选列] = "目标筛选值"),
    {"客户ID"},
    {{"query3_汇总值", each List.Sum([需要求和的列]), type number}}
),

// 4. 左连query1与processed_query2
merged_with_query2 = Table.NestedJoin(
    query1,
    {"客户ID"}, // 关联字段
    processed_query2,
    {"客户ID"},
    "query2数据",
    JoinKind.LeftOuter // 对应SQL LEFT OUTER JOIN
),
// 展开分组后的汇总列
expanded_query2 = Table.ExpandTableColumn(merged_with_query2, "query2数据", {"query2_汇总值"}, {"query2_汇总值"}),

// 5. 继续左连processed_query3
final_result = Table.NestedJoin(
    expanded_query2,
    {"客户ID"},
    processed_query3,
    {"客户ID"},
    "query3数据",
    JoinKind.LeftOuter
),
// 展开最后一组汇总列
final_expanded = Table.ExpandTableColumn(final_result, "query3数据", {"query3_汇总值"}, {"query3_汇总值"})

// 返回最终结果
final_expanded

方式2:直接在合并步骤中嵌入筛选+分组(更贴近SQL子查询写法)

如果你习惯SQL中子查询的紧凑写法,可以直接把筛选和分组逻辑嵌入到合并步骤里,完全无需额外变量:

// 加载SQL客户表
query1 = Sql.Database("你的SQL服务器地址", "目标数据库名", [Query="SELECT * FROM 客户表"]),

// 第一步左连:直接嵌入query2的筛选+分组逻辑
merged1 = Table.NestedJoin(
    query1,
    {"客户ID"},
    // 此处对应SQL中括号内的子查询逻辑
    Table.Group(
        Table.SelectRows(Excel.Workbook(File.Contents("query2路径.xlsx")){0}[Data], each [筛选列] = "目标筛选值"),
        {"客户ID"},
        {{"query2_汇总值", each List.Sum([求和列])}}
    ),
    {"客户ID"},
    "query2_data",
    JoinKind.LeftOuter
),
expanded1 = Table.ExpandTableColumn(merged1, "query2_data", {"query2_汇总值"}, {"query2_汇总值"}),

// 第二步左连:嵌入query3的筛选+分组逻辑
final_result = Table.NestedJoin(
    expanded1,
    {"客户ID"},
    Table.Group(
        Table.SelectRows(Excel.Workbook(File.Contents("query3路径.xlsx")){0}[Data], each [筛选列] = "目标筛选值"),
        {"客户ID"},
        {{"query3_汇总值", each List.Sum([求和列])}}
    ),
    {"客户ID"},
    "query3_data",
    JoinKind.LeftOuter
),
final_expanded = Table.ExpandTableColumn(final_result, "query3_data", {"query3_汇总值"}, {"query3_汇总值"})

final_expanded

关键语法对应关系

SQL语法Power Query对应操作
WHERETable.SelectRows
GROUP BY + 聚合Table.Group(配合List.Sum等聚合函数)
LEFT OUTER JOINTable.NestedJoin + JoinKind.LeftOuter

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:05:25