Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 查询以提取正确的匹配项_Ms Access_Ms Access 2010 - Fatal编程技术网

Ms access 查询以提取正确的匹配项

Ms access 查询以提取正确的匹配项,ms-access,ms-access-2010,Ms Access,Ms Access 2010,我有一个具有4位数成本中心和费率的表,我需要将其与具有4位数成本中心的表相匹配。问题是带有费率的表格以不同的方式列出了成本中心。它使用“X”来表示“包括所有这些”。因此,如果它希望从1开始的每个成本中心都有一个特定的费率,则表明1xx有一个特定的费率。我的成本中心表实际有4位数字,比如1000 如果费率表中的每个成本中心都是1位数,我可以处理这个问题,但有些成本中心有3位数和X(100X),有些成本中心只有一位数和X(1xx)。我如何处理所有可能的变化并确保在最低级别匹配 Rate table:

我有一个具有4位数成本中心和费率的表,我需要将其与具有4位数成本中心的表相匹配。问题是带有费率的表格以不同的方式列出了成本中心。它使用“X”来表示“包括所有这些”。因此,如果它希望从1开始的每个成本中心都有一个特定的费率,则表明1xx有一个特定的费率。我的成本中心表实际有4位数字,比如1000

如果费率表中的每个成本中心都是1位数,我可以处理这个问题,但有些成本中心有3位数和X(100X),有些成本中心只有一位数和X(1xx)。我如何处理所有可能的变化并确保在最低级别匹配

Rate table:
1xxx = $10
12xx = $5
123x = $2
2xxx = $15
3456 = $5
3xxx = $10

我如何确保成本中心1234收取2美元,而成本中心1000收取10美元?

我可以通过3个简单的查询来做到这一点-也许其他人可以向我们展示如何将它们合并为一个

首先-查找中心(要查找的中心列表)和成本中心(费率表)之间的所有匹配项-我将此查询称为“所有匹配项”

第二,查找最低级别的匹配,或者在前面的查询中具有最高“n”的匹配-我称之为“选定匹配”

最后,得到相应的速率:

SELECT [All matches].Center, [All matches].cost_center, [All matches].rate
FROM [All matches] INNER JOIN [selected matches] ON ([All matches].n = [selected matches].n) AND ([All matches].Center = [selected matches].Center);

你为什么要让自己的生活如此艰难?生成所有1xx作为合适的数字应该很容易。我无法控制速率表。我希望能有不同的做法,但我必须找到一种方法来处理这个费率表,它是有效的。我不明白它是如何工作的,但这只是意味着我需要更仔细地观察它,并从你所做的事情中学习。非常感谢你的帮助。我以前有过一些临时解决方案,但你的解决方案一直有效。谢谢。如果你有具体问题,请告诉我-我可以解释我做了什么。它通常有助于将查询分解成更小的部分,以便您可以看到每个步骤都在做什么。
SELECT [All matches].Center, Max([All matches].n) AS n
FROM [All matches]
GROUP BY [All matches].Center;
SELECT [All matches].Center, [All matches].cost_center, [All matches].rate
FROM [All matches] INNER JOIN [selected matches] ON ([All matches].n = [selected matches].n) AND ([All matches].Center = [selected matches].Center);