C#中基于共同列合并两个DataTable?Merge方法未达预期
解决Power Query中表关联保留主表所有行的问题
看起来你是把Power Query里的「行合并」和「列关联」搞混啦~你用的Table1.Merge(Table2)其实是追加两个表的行的操作,而你需要的是按IntervalID做左外连接(保留Table1的所有行,匹配Table2的Name,不匹配的显示NULL)。
问题原因
默认情况下,如果你用了错误的合并方式(比如内连接或者行追加),就只会得到匹配的行或者重复的行,达不到你要的效果。你需要明确指定左外连接的关联类型。
正确的解决方法
这里给你两种常用的实现方式:
方法1:直接用Table.Join生成结果
这个函数可以直接关联两个表并返回展开后的结果:
Table.Join( Table1, // 左表(要保留所有行的主表) {"IntervalID"}, // 左表用于匹配的列 Table2, // 右表 {"IntervalID"}, // 右表用于匹配的列 JoinKind.LeftOuter // 指定左外连接类型 )
方法2:先关联再展开(更灵活,适合多列匹配)
如果后续需要处理更多关联列,推荐用Table.NestedJoin先关联,再展开需要的列:
let // 第一步:按IntervalID左外连接两个表 JoinedTables = Table.NestedJoin( Table1, {"IntervalID"}, Table2, {"IntervalID"}, "MatchedTable2Data", // 存储关联结果的列名 JoinKind.LeftOuter ), // 第二步:展开Table2中的Name列 ExpandedNameColumn = Table.ExpandTableColumn( JoinedTables, "MatchedTable2Data", {"Name"}, // 要展开的列 {"Name"} // 展开后的列名 ) in ExpandedNameColumn
这两种方法都能得到你想要的结果:IntervalID包含1、2、3,对应的Name为XXX、NULL、NULL。
内容的提问来源于stack exchange,提问作者user2431727
相关产品推荐
相关产品推荐

