我有两张桌子需要加入,我很难做到。这是一个简化的例子:
表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
我知道它是一种粗暴的方法,但它适用于一个领域。现在我需要在多个字段上具有相同类型的条件,我想知道如何动态地执行它。我在线寻找解决方案,但在这种情况下找不到任何人。
同一问题的任何想法或链接? 感谢
答案 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