首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将CASE语句与连接一起使用

如何将CASE语句与连接一起使用
EN

Stack Overflow用户
提问于 2019-06-27 02:08:37
回答 1查看 37关注 0票数 0

我正在尝试使用join语句,它根据特定的case语句而有所不同。当字段lane.dest_postal_code_prefix不为空时,我希望连接类似于下面的第一段代码。当字段lane.dest_postal_code_prefix为空时,我希望连接类似于下面的第二个代码块。(注意两种情况在on条件上的差异)

我需要一些帮助,将case语句添加到join子句中。

代码语言:javascript
复制
--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
;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-27 02:13:16

您可以像这样使用一个ON子句:

代码语言:javascript
复制
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
)

在第二种情况下(else部分),条件总是真的,因为它是:

代码语言:javascript
复制
COALESCE(SUBSTRING(A.ddm_zip, 1, LENGTH( lane.dest_postal_code_prefix )), '') = COALESCE(SUBSTRING(A.ddm_zip, 1, LENGTH( lane.dest_postal_code_prefix )), '')

所以唯一的实际情况是

代码语言:javascript
复制
A.customer_country = lane.dest_country_code
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56778750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档