2012-07-18 69 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