首页 > 解决方案 > 根据案例陈述加入

问题描述

我想在两个表之间有 2 个连接条件,第一个连接条件应该始终有效,但第二个连接条件只有在满足条件时才有效,否则根据前两个连接给出结果。

我有两种方法,一种是直接给出两个条件,然后为第三个连接添加 case 语句

其次,我尝试在 ON 之后使用 case 语句对于第一种情况,我有 1 个连接条件,对于第二种情况,我有 2 个连接条件。

SELECT *,IND.bill_to_id  FROM  txn_sales_shippedorders_intl shippedorders
LEFT JOIN ( SELECT cust_sid, max(cust_key) cust_key
                  ,cust_nbr
              FROM com_hub.ref_customer_hco_intl
             GROUP BY cust_sid, cust_nbr
          ) cust ON cust.cust_sid = regexp_replace(shippedorders.cust_align_sid, "\\.0*", '')
                                --AND cust.country_cd = shippedorders.country_cd
                                AND cust.src_sys_id=shippedorders.src_sys_id

LEFT JOIN 
         (SELECT CUSTOMER,ship_to_id, bill_to_id
            FROM com_lake.ref_india_customer_crossmap
         ) ind ON case when substr(SDVR02,1,2) ='IM' 
                           and ind.ship_to_id = cust.cust_nbr then 1
                       WHEN substr(SDVR02,1,2) ='ER' and ind.CUSTOMER = cust.cust_name then 1
                    else 0
                  end 1

标签: sqlhive

解决方案


目前你的加入没有意义。您必须查看案例陈述的结果。

此刻它写道:

  Left JOIN (...) ind ON 0

或者

 Left Join (...) ind on 1

你需要有一个论点 - 例如

Left JOIN (...) ind on ind.index = CASE WHEN ...

推荐阅读