MS ACCESS - 根据来自其他字段的条件动态检索表中的记录

时间:2014-02-21 04:25:01

标签: sql database vba ms-access

寻找关于我的数据库中特定情况的一些建议......

现在我有一个数据库,其中包含一个链接到源数据表的查询。在查询中,我有一个表,其中包含组ID,子组ID及其对应的状态。它通过组ID链接到源数据,并基于此拉动状态。

我打算做的是如果子组ID包含关键字,让我们说“狗”,而不是按组ID拉动状态,请按子组ID拉出。

我尝试使用iif语句并仅为子组ID设置独立查询,但我得到空值。

在下面的示例中,记录1& 4,将检索CA& WI。记录2& 3,因为他们在描述中有“狗”,他们会找回NY。

我的查询是这样组织的,

Group ID        Subgroup ID     State
1   1000067 Omega       541111  Aplha   
2   1000056 Epsilon     542222  Bravo Dog   
3   2000653 Gamma       546066  Echo Dog    
4   2000654 Theta       968886  Charlie 

&安培;参考表如下所示,

ID      
1000067 Omega   CA
1000056 Epsilon FL
2000653 Gamma   TX
2000654 Theta   WI
541111  Alpha   CA
542222  Bravo Dog   NY
546066  Echo Dog    NY
968886  Charlie FL

非常感谢有关最佳方法的任何帮助或想法!

1 个答案:

答案 0 :(得分:0)

本质上你要做的是运行两个略有不同的查询 - 一个“狗”查询和一个“非狗”查询 - 并合并结果。 UNION查询可以做到这一点。用我们的主表[dogMain]

Record_ID  Group_ID         Subgroup_ID      
---------  ---------------  -----------------
        1  1000067 Omega    541111  Alpha    
        2  1000056 Epsilon  542222  Bravo Dog
        3  2000653 Gamma    546066  Echo Dog 
        4  2000654 Theta    968886  Charlie  

和我们的参考表[dogRef]

ID                 State
-----------------  -----
1000067 Omega      CA   
1000056 Epsilon    FL   
2000653 Gamma      TX   
2000654 Theta      WI   
541111  Alpha      CA   
542222  Bravo Dog  NY   
546066  Echo Dog   NY   
968886  Charlie    FL   

查询

    SELECT dogMain.Record_ID, dogRef.State
    FROM dogMain INNER JOIN dogRef ON dogRef.ID = dogMain.Group_ID
    WHERE dogMain.Subgroup_ID NOT LIKE '*dog'
UNION ALL
    SELECT dogMain.Record_ID, dogRef.State
    FROM dogMain INNER JOIN dogRef ON dogRef.ID = dogMain.Subgroup_ID
    WHERE dogMain.Subgroup_ID LIKE '*dog'
ORDER BY 1

返回

Record_ID  State
---------  -----
        1  CA   
        2  NY   
        3  NY   
        4  WI