我使用MS访问我的工作,并且有一个问题花了我太长时间来解决自己,所以我决定问你们,伙计们。问题是下一个: 我有两张定价表:a_prices
article5 a_price from_date to_date
00009 952.00 01/01/2012 31/12/2013
00009 720.00 01/01/2014 31/12/2015
00009 750.00 01/01/2016 31/12/2199
和a_client_prices
client_id article5 a_price from_date to_date
1 00009 700 31/12/2014 11/09/2015
2 00009 800 05/10/2015 07/04/2016
问题是创建一个返回精确客户端价格表的查询,因此如果该查询的输入为"其中client_id = 1"结果表看起来像下一个:
article5 a_price from_date to_date
00009 952.00 01/01/2012 31/12/2013
00009 720.00 01/01/2014 30/12/2014
00009 700 31/12/2014 11/09/2015
00009 720.00 12/09/2014 31/12/2015
00009 750.00 01/01/2016 31/12/2199
如果client_id = 2,那么:
article5 a_price from_date to_date
00009 952.00 01/01/2012 31/12/2013
00009 720.00 01/01/2014 04/10/2015
00009 800 05/10/2015 07/04/2016
00009 750.00 08/04/2016 31/12/2199
所以在查询中应该有类似重叠排除机制的东西,其中a_client_prices具有更高的优先级,但我无法想象更好的事情然后连接每天包含记录的表,排除过多的记录然后聚合它回到时期。
考虑到我使用ms访问,所以我可以轻松使用自定义聚合功能,如果你可以建议一个。我觉得它可能是解决方案之一,但在该领域的经验不足以了解如何自己设计一个。如果我错过了之前发布的答案,请提前感谢您的帮助。随意判断初始数据组织并提出其他可能性。
P.S。日常聚合的解决方案非常有效,但是处理时间太长而且查询使用方式太多,所以这个解决方案被拒绝了。
答案 0 :(得分:1)
查询无法做到这一点。
您正在使用此源记录:
00009 720.00 01/01/2014 31/12/2015
并将其拆分为两个记录,即时更改日期字段:
00009 720.00 01/01/2014 30/12/2014
00009 720.00 12/09/2014 31/12/2015
这只是几种不同情况中的一种。
没有聚合功能会这样做。您需要一个VBA解决方案,遍历记录集,并在新表中创建目标记录。
修改强>
我计算一个客户价格表的方法是:
a_prices
插入临时表a_client_prices
中的每条记录:
a_client_prices
记录插入临时表它需要相当多的逻辑,但应该非常快。