基于ID和Date合并两个Access数据集的方法求助
Access实操:合并数据集并实现按ID筛选月度数据
原始数据集
表1(假设命名为TableX)
| ID | Date | X |
|---|---|---|
| 1234 | 01.01.2022 | 15 |
| 1235 | 02.01.2022 | 244 |
表2(假设命名为TableY)
| ID | Date | Y |
|---|---|---|
| 1234 | 01.01.2022 | 7 |
| 1235 | 04.01.2022 | 18 |
目标合并格式
要求保留所有ID和日期组合,缺失的X/Y值用0填充:
| ID | Date | X | Y |
|---|---|---|---|
| 1234 | 01.01.2022 | 15 | 7 |
| 1235 | 02.01.2022 | 244 | 0 |
| 1235 | 04.01.2022 | 0 | 18 |
步骤1:用SQL查询合并数据集
Access没有直接的全连接功能,用以下方法实现:
- 打开Access,点击「创建」→「查询设计」,关闭弹出的「显示表」窗口,切换到SQL视图
- 粘贴以下SQL代码(注意替换
TableX和TableY为你实际的表名):
SELECT Combined.ID, Combined.Date, Nz(TableX.X, 0) AS X, Nz(TableY.Y, 0) AS Y FROM ( SELECT ID, Date FROM TableX UNION ALL SELECT ID, Date FROM TableY ) AS Combined LEFT JOIN TableX ON Combined.ID = TableX.ID AND Combined.Date = TableX.Date LEFT JOIN TableY ON Combined.ID = TableY.ID AND Combined.Date = TableY.Date GROUP BY Combined.ID, Combined.Date, Nz(TableX.X, 0), Nz(TableY.Y, 0);
UNION ALL:提取两个表所有ID和日期的组合,确保不遗漏记录Nz():自动把空值替换为0,满足缺失值填充要求GROUP BY:去重,避免重复记录
- 点击「运行」按钮,确认结果符合要求后,将查询保存为
CombinedData
步骤2:实现按ID筛选
方法1:表单筛选(可视化操作)
- 点击「创建」→「表单设计」,选择
CombinedData作为数据源 - 添加组合框控件:
- 在「设计」选项卡点击「组合框」,拖拽到表单上,按向导选择「表/查询」,行来源设置为
SELECT DISTINCT ID FROM CombinedData; - 完成向导后,选中组合框,右键→「属性」,在「更新后」事件中输入:
Me.Filter = "ID = " & Me.[你的组合框名称] Me.FilterOn = True
- 在「设计」选项卡点击「组合框」,拖拽到表单上,按向导选择「表/查询」,行来源设置为
- 切换到表单视图,选择ID就能自动筛选对应数据
方法2:手动筛选(无需代码)
在CombinedData的数据表视图中,点击ID列的下拉箭头,选择要查看的ID即可
步骤3:制作月度数据图表
如果需要查看各ID的月度X/Y数据,先创建月度汇总查询:
- 新建查询,切换到SQL视图,输入:
SELECT ID, Format(Date, "yyyy-MM") AS Month, Sum(X) AS MonthlyX, Sum(Y) AS MonthlyY FROM CombinedData GROUP BY ID, Format(Date, "yyyy-MM") ORDER BY Month;
保存为MonthlySummary
- 创建图表:
- 点击「创建」→「图表向导」,选择
MonthlySummary作为数据源 - 选择
ID、Month、MonthlyX、MonthlyY字段,点击下一步 - 选择图表类型(比如折线图、柱状图),设置系列为
MonthlyX和MonthlyY,分类轴为Month,完成向导 - 可以给图表添加和步骤2一样的ID筛选控件,实现按ID查看月度趋势
- 点击「创建」→「图表向导」,选择
内容的提问来源于stack exchange,提问作者Chris_A
相关产品推荐
相关产品推荐

