基于字段值的ACCESS SQL中的条件连接?

时间:2017-04-27 10:47:32

标签: sql ms-access

我有两张桌子需要加入,我很难做到。这是一个简化的例子:

表1(T1)字段: CUST_ID, PROD_ID, TYPE_ID

表2(T2)字段: CUST_ID, PROD_ID, TYPE_ID, 结果

问题是: 我需要表1中的所有值。如果T1.Cust_ID为Null,那么我需要来自T2的所有行具有相同的Prod_ID和Type_ID。如果T1.Cust_ID不是Null,那么我只需要来自T2的行,其中T1.Cust_ID = T2.Cust_ID具有相同的Prod_ID和Type_ID。

我的第一次尝试是进行联合查询:

Select T1.Cust_ID, T1.Prod_ID, T1.Type_ID, T2.Results
From T1 left join T2
On T1.Cust_ID=T1.Cust_ID and T1.Prod_ID=T2.Prod_ID and T1.Type_ID=T2.Type_ID
Where T1.Cust_ID is not Null
Union
Select T1.Cust_ID, T1.Prod_ID, T1.Type_ID, T2.Results
From T1 left join T2
On T1.Prod_ID=T2.Prod_ID and T1.Type_ID=T2.Type_ID
Where T1.Cust_ID is Null

我知道它是一种粗暴的方法,但它适用于一个领域。现在我需要在多个字段上具有相同类型的条件,我想知道如何动态地执行它。我在线寻找解决方案,但在这种情况下找不到任何人。

同一问题的任何想法或链接? 感谢

1 个答案:

答案 0 :(得分:0)

我希望我理解正确。这可以为你解决问题:

   SELECT
          SWITCH(
            T1.Cust_ID IS NULL,T2.Cust_ID,
            T1.Cust_ID IS NOT NULL, T1.Cust_ID
          ) AS Cust_ID,
          SWITCH(
            T1.Cust_ID IS NULL,T2.Prod_ID,
            T1.Cust_ID IS NOT NULL, T1.Prod_ID
          ) AS Prod_ID,
          SWITCH(
            T1.Cust_ID IS NULL,T2.Type_ID,
            T1.Cust_ID IS NOT NULL, T1.Type_ID
          ) AS Cust_ID,
          T2.Results
        FROM T1
        FULL OUTER JOIN T2
        ON T1.Prod_ID  = T2.Prod_ID
        AND T1.Type_ID = T2.Type_ID