从Excel双工作表生成月度可追加临时表的SQL查询求助
解决Excel两表合并并每月自动追加数据的问题
先明确你的数据源情况:
departure表数据:
| MONTH | Name |
|---|---|
| April | Michael |
| April | Danny |
arrival表数据:
| MONTH | Name |
|---|---|
| April | Sunny |
| April | Sam |
针对你需要合并两表、标记来源并每月自动追加当月数据的需求,给你两个实用方案:
方案一:用Excel Power Query(推荐)
Power Query是Excel处理这类合并、增量更新的最优工具,操作简单还能自动化:
步骤1:导入两张表到Power Query
- 打开Excel,点「数据」选项卡 →「获取数据」→「自文件」→「自工作簿」,选中当前文件
- 在导航器里选
departure和arrival表,点「加载到」→ 选「仅创建连接」,勾上「添加到数据模型」
步骤2:合并表并添加status标记
- 点「数据」→「获取数据」→「自其他来源」→「空白查询」
- 在公式栏粘贴以下M代码(表名和你的实际表名一致就行):
let // 给departure表加status标记 DepartureData = Table.AddColumn(departure, "status", each "departure"), // 给arrival表加status标记 ArrivalData = Table.AddColumn(arrival, "status", each "arrival"), // 合并两张表 CombinedData = Table.Combine({DepartureData, ArrivalData}), // 筛选当月数据(自动取当前月份,可按需调整) CurrentMonth = Date.MonthName(DateTime.LocalNow()), FilteredData = Table.SelectRows(CombinedData, each [MONTH] = CurrentMonth) in FilteredData
- 点「关闭并上载」,选把数据加载到新工作表,这就是你的临时表
步骤3:设置自动刷新追加
- 右键临时表 →「刷新」就能拿到当月最新合并数据;要自动刷新的话,点「数据」→「全部刷新」→「连接属性」,设置每月固定时间自动刷新就行
方案二:用Excel SQL查询(适合熟悉SQL的用户)
如果习惯写SQL,用Excel的数据连接就能实现:
步骤1:创建SQL查询连接
- 点「数据」→「获取数据」→「自其他来源」→「来自Microsoft Query」
- 选「Excel Files*」,选中当前工作簿,点「确定」
- 查询向导里依次加
departure和arrival表,关闭向导进入SQL视图,输入以下语句(注意表名要加$后缀,比如departure$):
SELECT MONTH, Name, 'departure' AS status FROM departure$ UNION ALL SELECT MONTH, Name, 'arrival' AS status FROM arrival$ WHERE MONTH = DATENAME(month, GETDATE())
- 点「返回数据」,选加载到新工作表
步骤2:实现每月追加
- 每次要追加当月数据,右键临时表→「刷新」就会自动拉取当月的departure和arrival数据合并;要自动追加同样在连接属性里设置定时刷新
关于你遇到的CASE WHEN瓶颈
CASE WHEN是单表内的条件判断逻辑,而跨表合并需要用UNION ALL(SQL)或者Table.Combine(Power Query)来拼接两个数据集,再单独给每个数据集加来源标记,不是在单表里用CASE WHEN去判断另一表的内容,这就是你之前卡壳的原因。
内容的提问来源于stack exchange,提问作者somansh
相关产品推荐
相关产品推荐

