基于历史表日期填充任务表Hummer qty字段的技术求助
解决方案
方法1:更新查询+子查询(推荐,性能更优)
第一步:生成客户累计Hummer数量历史
先创建一个名为qry_HummerCumulative的查询,计算每个客户到各历史日期的累计Hummer数量:
SELECT h1.Client, h1.Date, SUM(h2.Increment) AS CumulativeQty FROM HummerHistory h1 INNER JOIN HummerHistory h2 ON h1.Client = h2.Client AND h2.Date <= h1.Date GROUP BY h1.Client, h1.Date ORDER BY h1.Client, h1.Date;
这个查询会按客户分组,把所有早于等于当前历史日期的增量累加,得到截至该日期的总Hummer数量。
第二步:批量更新任务表字段
创建更新查询,为任务表每条记录匹配对应客户、任务日期前(含当天)的最新累计值,无历史记录则填0:
UPDATE TaskActivity ta SET ta.[Hummer qty] = Nz( (SELECT TOP 1 CumulativeQty FROM qry_HummerCumulative hc WHERE hc.Client = ta.Client AND hc.Date <= ta.Date ORDER BY hc.Date DESC), 0 );
Nz()函数用来处理无匹配记录的情况,直接返回0TOP 1配合ORDER BY Date DESC确保取到离任务日期最近的历史累计值
方法2:修正Dlookup函数用法
你之前用Dlookup返回空值,是因为没限定取最新的匹配记录。先完成第一步的累计查询后,在任务表的更新表达式里用:
Nz(DLookup("CumulativeQty", "qry_HummerCumulative", "Client = '" & [Client] & "' AND Date <= #" & Format([Date], "yyyy-mm-dd") & "#"), 0)
注意:
- 如果
Client是数字类型,去掉表达式里的单引号 - 日期字段必须用
#包裹,且用Format()统一格式,避免因区域设置导致的日期解析错误
关键注意事项
- 确保两张表的
Client字段类型完全一致(文本/数字),否则会出现匹配失败 - 若历史表存在同一客户同一天的多条增量记录,需先对单日增量求和,再生成累计查询
- 大表场景下优先用方法1,子查询性能比Dlookup更稳定
内容的提问来源于stack exchange,提问作者Aleks
相关产品推荐
相关产品推荐

