需要智能地在访问表上执行更新。 需要专家VBA /智能思维。
Table1 (For reference only)
CompanyCode Text
RegionCategory Number (1-99)
RegionCount Number(0 - 25000)
Table2
InvoiceNumber Number
CompanyCode Text
NumRows Number
RegionCode FourdigitNumber
ConfirmationRemark Y / N
我们的目标是在'确认备注'栏中加上是或否。 规则:
1.仅选择那些具有Table2和不同RegionCode两行的InvoiceNumbers。这些将具有相同的CompanyCode。 RegionCategory是RegionCode的前两位数。
2.对于这两个发票 - 两个RegionCategory之间的差异必须大于两个。
3.LookUp来自Table1的RegionCount
决策: 我们现在基本上将两个发票与不同的RegionCodes进行比较。 想法是,具有较高RegionCount的Invoice是要标记为Yes的那个。
1. RegionCount之间的差异必须相当大。 '相当' - 我试图确定什么是正确的数字。我们现在就拿500。
2.具有较低区域计数的发票 - 应该具有RegionCount - 零(bestCase)或非常低。如果具有较低区域计数的发票具有较高的RegionCount值> 200,那我们就不能成功结束。
3.NumRows,优选为1或小于1。这种比较不是强制性的,因此我们将有一项规定不对此进行检查。将其他发票标记为“N”
答案 0 :(得分:2)
您有很多方法可以处理这种类型的复杂更新。
如果幸运的话,您可以制作一个包含所有更改的SQL UPDATE
语句,但通常需要使用SELECT
个查询和自定义VBA的组合来根据计算结果或涉及其他数据的查找过滤它们。
通常,我们倾向于根据“获取符合条件的数据的步骤来考虑问题”。
但有时候,更容易解决问题,而是问自己'获取与标准不符的数据的步骤是什么'。
因为在您的情况下结果是布尔值,真或假,您可以简单地为所有记录设置ConfirmationRemark
字段为True
,然后更新应设置为False
的字段,而不是反过来说。
分解每个步骤(如您所做)并尝试找到最简单的SELECT
查询,该查询将仅返回该步骤所需的数据。如果步骤太复杂,请进一步分解。
将您细分的SELECT
语句组合在一起,慢慢构建一个更符合您目标的更复杂的查询。
一旦你走得太远,要么构造一个UPDATE Table2 SET ConfirmationRemark=True WHERE InvoiceNumber IN (SELECT InvoiceNumber ....)
,要么使用VBA来完成你的两个SELECT
语句的结果记录集,然后再做一些检查。更新代码中的字段。
不幸的是,尽管你努力记录你的情况,但我们没有足够的细节来帮助我们:
您没有提到哪些是主键(根据您的说法,似乎Table2
可能有多条记录具有相同的InvoiceNumber
)
您正在处理的数据类型并不明显。您应该包含一个数据样本,并确定哪些数据最终应设置为ConfirmationRemark
。
你的问题实际上太局部化了,这意味着它太具体了你不能对别人有价值,虽然我认为如果只是为了展示一个例子,你的问题可能会引起一些关注如何在Access中处理复杂的数据更新。