我有一个查询(在 MS Access 2013 中),它按日期为我提供各种项目的销售额,在接下来的 12 个月中的每一天。在另一个表中,我为每个项目提供了已知的采购提前期,比如 30 到 90 天。我创建了一个查询,对于每个项目,我根据提前期计算了未来日期,使用:
FutureDate: DateAdd("d",[Leadtime],Date())
我验证了 Sales 查询中存在的所有项目,并且所有 FutureDates 都在 Sales 中存在的记录中。
我需要计算从现在到计算出的每个项目的 [FutureDate] 之间的每日销售额总和,以获得在每个项目的唯一提前期内预期的总销售额。
我尝试了具有奇怪结果的函数 DSUM():
每日销售额的查询已经排除了任何过去的销售额,所以我的第一次尝试是:
TotalSalesInLeadtime: DSUM("DailySales","Sales","[DayOfSale]<=#" & [FutureDate] & "# AND [Item]='" & [SearchedItem] &"'")
对于某些项目,[TotalSalesInLeadtime] 计算正确,而其他项目评估为 Null。
然后我尝试了:
TotalSalesInLeadtime: DSUM("DailySales","Sales","[DayOfSale] BETWEEN #" Date() "# AND #" & [FutureDate] & " AND [Item]='" & [SearchedItem] &"'")
现在的结果发生了逆转。[TotalSalesInLeadtime] 值现在对于之前显示为 Null 的项目正确显示,并且对于之前正确评估的项目为 Null。
我从来不明白为什么 DSUM() 会这样做。
为了解决 DSUM() 故障,我使用了一个嵌入式子查询,它正确地产生了所有值,尽管性能受到了重大影响:
SELECT [PurchItem],
(SELECT Sum([DailySales]) AS SumOfSales
FROM [Sales]
WHERE ([Item]=[LeadtimeItems].[PurchItem]) AND ([DayOfSale] Between Date() AND [LeadtimeItems].[FutureDate]))
As TotalSalesInLeadtime
FROM LeadtimeItems
如果有人知道为什么 DSUM 可能会有这种行为,我将不胜感激。DSUM,当它工作时,肯定看起来更快。