2017-04-27 45 views
0

我有兩張表需要加入,我很難做到這一點。下面是一個簡化的例子:基於字段值的ACCESS SQL中的條件連接?

表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不爲空,那麼我只需要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 

我知道它的蠻力方法,但它適用於一個領域。現在我需要在一個以上的領域有這種相同的條件,我想知道如何動態地做到這一點。我在線尋找解決方案,但在這種情況下找不到任何人。

任何想法或鏈接到同一個問題? 謝謝

回答

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

原來存在ACCESS沒有「CASE」功能:-( –

+0

對不起,我沒你使用MSACCESS注意到我編輯的代碼段立即嘗試使用它。 – Barkezy

+0

嗨,謝謝你的回答。原來MS ACCESS不支持全外連接。 –