簡體   English   中英

如何在JOIN中使用CASE語句

[英]How to use a CASE statement with a JOIN

我正在嘗試使用基於某些case語句而有所不同的join語句。 當字段lane.dest_postal_code_prefix不為NULL時,我希望聯接像下面的第一段代碼一樣。 當field lane.dest_postal_code_prefix為NULL時,我希望聯接像下面的第二個代碼塊一樣。 (請注意兩種情況下ON條件的差異)

我需要一些幫助,將case語句添加到join子句中。

--WHEN lane.dest_postal_code_prefix is NOT NULL
SELECT * FROM big_bucket_bridge A
    LEFT JOIN lane 
    ON
    (
    A.customer_country = lane.dest_country_code
    AND
    SUBSTRING( A.ddm_zip, 1, LENGTH( lane.dest_postal_code_prefix ) ) = 
    lane.dest_postal_code_prefix
        )

WHERE  
    snapshot_day between '2019-06-23'-22 and '2019-06-23'
    AND (is_before_cutoff_g OR (is_before_cutoff_opt_g and not under_two))
    AND row_n =1
;

--WHEN lane.dest_postal_code_prefix is NULL
SELECT * FROM big_bucket_bridge A
    LEFT JOIN lane 
    ON
    (
    A.customer_country = lane.dest_country_code
    )

WHERE  
    snapshot_day between '2019-06-23'-22 and '2019-06-23'
    AND (is_before_cutoff_g OR (is_before_cutoff_opt_g and not under_two))
    AND row_n =1
;

您可以這樣使用一個ON子句:

ON
(
A.customer_country = lane.dest_country_code
AND
COALESCE(SUBSTRING(A.ddm_zip, 1, LENGTH( lane.dest_postal_code_prefix )), '') = CASE 
  WHEN lane.dest_postal_code_prefix IS NOT NULL THEN lane.dest_postal_code_prefix 
  ELSE COALESCE(SUBSTRING(A.ddm_zip, 1, LENGTH( lane.dest_postal_code_prefix )), '')
END
)

在第二種情況下(其他部分),該條件始終為真,因為它是:

COALESCE(SUBSTRING(A.ddm_zip, 1, LENGTH( lane.dest_postal_code_prefix )), '') = COALESCE(SUBSTRING(A.ddm_zip, 1, LENGTH( lane.dest_postal_code_prefix )), '')

所以唯一的實際情況是

A.customer_country = lane.dest_country_code

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM