在Access中构建查询:通过日期判断日类型关联表获取rate值
Access复杂查询:按日期类型匹配获取对应Rate值
嘿,我来帮你搞定这个Access查询需求!结合你描述的表结构和业务逻辑,我整理了清晰的实现思路和可直接复用的查询代码:
核心逻辑拆解
- 第一步:识别日期类型:用Access的
Weekday()函数判断日期是工作日还是周末,转换成和Table_C里day_type字段匹配的字符串('WEEKDAY'/'WEEKEND') - 第二步:关联表获取Rate:把
Readings的日期转换结果和Table_C的day_type关联,同时保持Table_B和Table_C的原有关联关系,精准拿到对应日期的Rate值
完整查询代码
SELECT r.[date], -- 计算当前日期对应的日类型,方便直观查看结果 CASE WHEN Weekday(r.[date], vbMonday) BETWEEN 1 AND 5 THEN 'WEEKDAY' ELSE 'WEEKEND' END AS calculated_day_type, c.[rate] FROM [Readings] r INNER JOIN ([Table_B] b INNER JOIN [Table_C] c -- 替换为Table_B和Table_C实际的关联字段(比如主键/外键) ON b.[关联字段] = c.[关联字段] -- 直接在这里匹配日类型,确保只取对应日期的Rate AND c.[day_type] = CASE WHEN Weekday(r.[date], vbMonday) BETWEEN 1 AND 5 THEN 'WEEKDAY' ELSE 'WEEKEND' END) -- 如果Readings和Table_B有直接关联(比如某个ID字段),替换成实际关联条件,比如r.xxx = b.xxx ON 1=1 ORDER BY r.[date];
关键细节说明
- Weekday函数的小技巧:我用了
Weekday(r.[date], vbMonday),把周一设为一周的第一天,这样返回值1-5对应工作日,6-7对应周末,完全符合常规的工作日定义 - 关联条件的优化:把日类型的匹配放在
Table_B和Table_C的关联里,比单独用WHERE过滤更高效,还能避免不必要的笛卡尔积 - 占位符替换提示:记得把
[关联字段]换成你实际的关联字段(比如b.id = c.table_b_id);如果Readings和Table_B有直接关联关系,一定要把ON 1=1改成对应的关联条件,这样查询逻辑会更严谨
要是你还有其他细节需要调整(比如用左连接替代内连接),随时告诉我就行~
内容的提问来源于stack exchange,提问作者Daryn
相关产品推荐
相关产品推荐

