【问题标题】:Conditional join in ACCESS SQL based on the value of the field?ACCESS SQL中基于字段值的条件连接?
【发布时间】:2017-04-28 16:17:35
【问题描述】:

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

表 1 (T1) 的字段: 客户 ID, 产品 ID, 类型_ID

表 2 (T2) 的字段: 客户 ID, 产品 ID, 类型_ID, 结果

问题是: 我需要表一中的所有值。如果 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

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

有相同问题的想法或链接吗? 谢谢

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    希望我理解正确。这可能对你有用:

       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
    

    【讨论】:

    • 原来ACCESS中没有“CASE”功能:-(
    • 抱歉,我没有注意到您使用 MSACCESS。我编辑了代码 sn-p。现在尝试使用它。
    • 您好,感谢您的回答。原来 MS ACCESS 也不支持完全外连接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 2023-03-18
    • 2021-08-23
    • 2018-07-04
    • 2018-06-13
    相关资源
    最近更新 更多