如何为嵌套查询传递可变条件?Excel ADODB场景实现
需求说明
我为该问题投入了大量精力,若需补充任何信息请告知。
我需要以一种目前未找到的方式合并表格,将在Excel的ADODB中执行查询,因此希望使用单个带可变条件的查询实现。
简化场景
表A(每日设置表)
| day | prebatch | setting |
|---|---|---|
| mon | D1 | 1 |
| mon | D2 | 2 |
| mon | D3 | 2 |
| mon | D4 | 5 |
| mon | D5 | 8 |
| thu | D1 | 2 |
| thu | D2 | 4 |
| thu | D3 | 6 |
| thu | D4 | 8 |
表B(填充数据表)
| date | prebatch | batch | value |
|---|---|---|---|
| 27-5 | D1 | BBD1 | 20 |
| 27-5 | D2 | BBD3 | 21 |
| 28-5 | D1 | BBD4 | 30 |
| 28-5 | D3 | BBD8 | 30 |
预期合并结果
按prebatch关联两表,显示某日所有设置及对应的填充数据:
| day | prebatch | setting | batch | value |
|---|---|---|---|---|
| mon | D1 | 1 | BBD1 | 20 |
| mon | D2 | 2 | BBD3 | 21 |
| mon | D3 | 2 | ||
| mon | D4 | 5 | ||
| mon | D5 | 8 | ||
| thu | D1 | 2 | BBD4 | 30 |
| thu | D2 | 4 | ||
| thu | D3 | 6 | BBD8 | 30 |
| thu | D4 | 8 |
真实数据情况
- 设置表:结构与简化场景表A类似,包含preBatch、planEind、sort、dag等字段
- 填充数据表:结构与简化场景表B类似,包含date、preBatch、batch、labActPak、labVerwEind等字段
尝试过的查询方案
方案1:结果包含错误日期数据
查询语句:
SELECT tbl_inst_lab.preBatch, tbl_data_lab.batch, tbl_data_lab.labActPak, tbl_inst_lab.planEind, tbl_data_lab.labVerwEind, tbl_data_lab.labWerkelEind, tbl_data_lab.labWerkelEindRevIV, tbl_inst_lab.sort, tbl_inst_lab.dag FROM tbl_inst_lab LEFT JOIN tbl_data_lab ON tbl_inst_lab.preBatch = tbl_data_lab.preBatch WHERE ( ((tbl_data_lab.batch)=IIf([datum]=#5/16/2024#,[batch],"")) AND ((tbl_inst_lab.dag)="do") ) OR (((tbl_inst_lab.dag)="do")) ORDER BY tbl_inst_lab.sort;
问题:返回结果包含非目标日期的填充数据。
方案2:结果正确但过于复杂
查询语句:
SELECT DISTINCT tbl_inst_lab.preBatch, IIf([tbl_data_lab].[datum]=#5/16/2024#,[tbl_data_lab].[batch]) AS exprBatch, IIf([tbl_data_lab].[datum]=#5/16/2024#,[labActPak]) AS exprlabActPak, tbl_inst_lab.planEind, IIf([tbl_data_lab].[datum]=#5/16/2024#,[labVerwEind]) AS exprlabVerwEind, IIf([tbl_data_lab].[datum]=#5/16/2024#,[labWerkelEind]) AS exprlabWerkelEind, IIf([tbl_data_lab].[datum]=#5/16/2024#,[labWerkelEindRevIV]) AS exprlabWerkelEindRevIV, tbl_inst_lab.sort, tbl_inst_lab.dag FROM tbl_inst_lab LEFT JOIN tbl_data_lab ON tbl_inst_lab.preBatch = tbl_data_lab.preBatch WHERE (((tbl_inst_lab.dag)="do")) ORDER BY tbl_inst_lab.sort;
问题:需要为每个填充数据表字段编写IIf表达式,语句冗余复杂。
其他尝试
- 尝试过嵌套查询(查询C以设置表A和带条件的填充数据查询B为输入),但无法为查询B传递可变条件;
- 曾在Access中用固定条件实现,但需要在Excel ADODB中使用可变条件执行查询;
- 尝试UNION,但两表字段数量不一致无法使用。
寻求更简洁的单查询解决方案,支持在Excel ADODB中传入可变日期条件。
内容的提问来源于stack exchange,提问作者Willie Keysers
相关产品推荐
相关产品推荐

