Access 2016 SQL:查找两列不同表

时间:2017-07-14 15:21:25

标签: sql ms-access access-vba

我还没有弄清楚如何整理这个SQL字符串。如果有人可以帮助我,我真的很感激。我正在使用Access 2016,因此请仅提供适用于Access的答案。我有两个查询,除了一个共同点之外,它们都有不同的字段。我需要找到两个相似列之间的最小绝对差值。然后,我需要能够从相应的记录中提取数据。例如,

qry1.Col1  |  qry1.Col2
-----------|-----------
10245.123  | Have
302044.31  | A

qry2.Col1 | qry2.Col2
----------------------
23451.321 | Great
345622.34 | Day

在第三个查询中找到最小绝对差值qry3。例如,Min(Abs(qry1!Col1 - qry2!Col1)我想它会为qry1.Col1中的每个值生成其中一个表。对于值10245.123,

qry3.Col1
----------
13206.198
335377.217

由于13206.198是最小绝对差值,我想拉出与qry2相对应的记录,并将其与qry1中的数据相关联(假设这使用JOIN,我假设)。导致像这样的第四个查询,

qry4.Col1 (qry1.Col1) | qry4.Col2 (qry1.Col2) | qry4.Col3 (qry2.Col2)
----------------------------------------------------------------------
10245.123             | Have                  | Great
302044.31             | A                     | Day

如果在一个SQL字符串中都可行,那就太好了。如果需要几个步骤,那也没问题。我只想避免在VBA中使用循环和RecordSet.Findfirst来耗费时间。

1 个答案:

答案 0 :(得分:1)

您可以使用相关子查询:

select q1.*,
       (select top 1 q2.col2
        from qry2 as q2
        order by abs(q2.col1 - q1.col1), q2.col2
       ) as qry2_col2
from qry1 as q1;