首页 > 解决方案 > 检查条件后连接 2 列

问题描述

我正在尝试将这 2 列“pv.name package_version_name”和“sf_li.sf_lma_version_number_c”连接起来,我试图将它与下面的 if 语句结合起来。
[Package_version_name] ([Version_Number]) 示例输出:Chicago Update 2 (14.4.2) 将抛出另一个示例,版本号:(13.0.10);package_version_name:芝加哥;输出/新列(版本发布):芝加哥(13.0.10)。在某些情况下 package_version_name 已经有两个字段连接示例 package_version_name: Brooklyn (9.5.14),所以我们可以在新列 (版本发布) : Brooklyn (9.5.14) 中单独输出它而不添加版本号,因为它是已经在那了。

sf_li.sf_lma_version_number_c AS version_number,
pv.name package_version_name,
IF( CONTAINS(pv.Name , ")"), pv.Name, pv.Name + "(" + sf_li.sf_lma_version_number_c + ")"),
FROM "prod"."salesforce"."sf_lma_license_c" sf_li
    left join "prod"."salesforce"."sf_lma_package_version_c" pv
        on sf_li.sf_lma_package_version_c=pv.id

标签: sqldbt

解决方案


要运行的代码:

SELECT 
   CASE 
     WHEN package_version_name NOT LIKE '%(%' OR package_version_name NOT LIKE '%)%'  
     THEN   CONCAT(        
                     CONCAT(cast(package_version_name as char(200)),
                            cast('(' as char (200))) 
                            , 
                     CONCAT(cast(version_number as char(200)),
                            cast(')' as char(200)))        
                  ) 
     ELSE 
        package_version_name   as final_version_field
 FROM 
     [TABLE NAME] / from {{ref('[TABLE NAME]')}}

额外条件:

您还可以添加另一个条件,即:

WHEN package_version_name NOT LIKE '%(%' or package_version_name not like '%)%' AND IS_VARCHAR(package_version_name) = 'True'

这还将检查您是否没有括号,即(并且)值是 type varchar。我用过IS_VARCHAR雪花,你可以找到与你的 sql 相关的那个


推荐阅读