2012-07-18 151 views
0

我對無關表上的數據庫查詢有疑問。
這次需要VBA沒有使用(需求來自我的經理),這使得它很難。無VBA訪問查詢

我的查詢必須返回5列數據。 前4個列直接從前一個查詢的輸出中檢索,因此很容易。

Query Q_STOP_LOSS: 

Year Contr_Pool_ID   Contr_Ins_ID  COUNTRY Employees STOP_LOSS 
2010 Crédit Agricole CIB QUATREM   2   6024 
2010 Crédit Agricole CIB QUATREM   2   6024 
2010 Amada CO LTD   MALAKOFF MEDERIC 4   1320 
2010 Amada CO LTD   MALAKOFF MEDERIC 4   1320 
2010 Amada CO LTD   MALAKOFF MEDERIC 4   1320 

的所謂「STOP_LOSS」最後一列是問題,因爲填充在裏面的值應該從一個不相關的表基於檢索在WHERE子句。 它應該包含另一個不包含相等字段的表中的SL值。 該表被稱爲T_STOP_LOSS並列出間隔。

Table: T_STOP_LOSS 

ID LIVES_FROM LIVES_TO NR_COUNTRIES_FROM NR_COUNTRIES_TO SL_VALUE 
1 0   999  2     2    39,3 
12 0   999  3     3    34,6 
23 0   999  4     4    29,6 
34 0   999  5     9    25,7 
45 0   999  10     100    22,17 
46 1000  1499  2     2    31,1 
2 1000  1499  3     3    27,4 
13 1000  1499  4     4    23,3 
24 1000  1499  5     9    20,4 
35 1000  1499  10     100    17,5 

當 「國家」 和 「僱員」 的值(列3 & 4,作爲先前查詢的結果)位於所述間隔分別爲 「LIVES_FROM/LIVES_TO」 AND 「NR_COUNTRIES_FROM/NR_COUNTRIES_TO」 之間,然後應該返回的是相應的SL_Value。我無法弄清楚,因爲這兩個表之間沒有相應的字段,我這次不允許使用VBA。 爲了讓它更難,「LIVES_FROM/LIVES_TO」和「NR_COUNTRIES_FROM/NR_COUNTRIES_TO」包含相關表的ID。
任何想法如何將這列添加到查詢中而不使用VBA ...? 我試圖使用查詢工具和SQL視圖,但我無法獲得正確的結果(使用VBA會輕鬆很多,而且我不是使用Access自己最方便的一個)。

讓我知道我的問題不清楚!

回答

2

如何:

SELECT (SELECT TOP 1 sl_value 
     FROM t_stop_loss t 
     WHERE q.country BETWEEN nr_countries_from AND nr_countries_to 
       AND q.employees BETWEEN lives_from AND lives_to) AS stop_loss, 
     q.year, 
     q.contr_pool_id, 
     q.contr_ins_id, 
     q.country, 
     q.employees 
FROM q_stop_loss q 
+0

我查一下明天,仍然沒有互聯網,只有3G: -/ – Trace 2012-07-18 20:47:26

+0

這是真棒Remou,我再次從該查詢學到了很多東西。 – Trace 2012-07-19 08:23:42