2017-07-14 54 views
0

我一直無法弄清楚如何將這個SQL字符串放在一起。如果有人能幫助我,我真的很感激。我使用的是Access 2016,所以請只提供適用於Access的答案。我有兩個查詢都有不同的領域,除了一個共同的。我需要找到兩個相似列之間的最小絕對差異。然後,我需要能夠從相應的記錄中提取數據。例如,訪問2016 SQL:查找不同表格的兩列之間的最小絕對差異

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

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

在第三個查詢qry3中查找最小絕對差值。舉例來說,閔(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字符串中實現,這將非常棒。如果需要幾個步驟,那也可以。我只是想避免不得不使用循環和耗時Set.Findfirst在VBA中。

回答

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; 
+0

謝謝。有沒有辦法選擇與前1相同的記錄中的多列數據? – Josh

+0

啊我看到,我可以添加額外的選擇頂部子查詢的額外領域。但是,當我這樣做時,Access告訴我「最多可以從這個子查詢中選擇一條記錄。」 – Josh

+1

@Josh。 。 。 MS Access確實是'TOP WITH TIES'。您可以通過在'ORDER BY'中包含一個唯一鍵作爲最後一個鍵來解決這個問題。 –

相關問題