检查条件后连接 2 列

Concatenate 2 columns after checking a condition

我正在尝试连接这两列“pv.name package_version_name”和“sf_li.sf_lma_version_number_c”,我正在尝试将其与下面的 if 语句连接起来。
[Package_version_name] ([Version_Number]) 示例输出:芝加哥更新 2 (14.4.2) 我举另一个例子,版本号:(13.0.10); package_version_name:芝加哥; output/new 列(版本发布):芝加哥 (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

编码为运行:

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'

这还将检查您没有括号,即 (),并且值的类型为 varchar。我用过 IS_VARCHAR 因为我用的是 snowflake 你可以找到与你的 sql

相关的那个
SELECT distinct sf_li.id license_id,
        sf_li.created_date as license_created_date,
       sf_li.name                               AS license_name,
       sf_li.sf_lma_install_date_c              AS install_date,
       sf_li.sf_lma_subscriber_org_id_c org_id,
       sf_li.sf_lma_org_type_c                  AS org_type,
       sf_li.sf_lma_subscriber_org_is_sandbox_c AS sandbox_org,
       sf_li.sf_lma_status_c                    AS status,
       sf_li.sf_lma_version_number_c            AS skuid_version_number,
       sf_li.sf_lma_expiration_c expiration_date,
       sf_li.sf_lma_license_type_c license_type,
       sf_li.sf_lma_package_license_id_c package_license_id,
       sf_li.sf_lma_package_version_c package_version_id,
       pv.sf_lma_package_c package_id,
       pv.name package_version_name,
       pv.sf_lma_release_date_c package_release_date,
       pv.release_number_c package_release_number,
       CASE WHEN package_version_name NOT LIKE '%(%' or package_version_name not like '%)%' THEN CONCAT(package_version_name, skuid_version_number) else package_version_name end skuid_release,
       --CASE WHEN package_version_name NOT LIKE '%(%' or package_version_name not like '%)%' THEN CONCAT(package_version_name, '(',skuid_version_number,')') else package_version_name end skuid_release,
      -- CASE WHEN package_version_name NOT LIKE '%(%' or package_version_name not like '%)%' AND VARCHAR(package_version_name) = 'True',
      -- CASE WHEN package_version_name NOT LIKE '%(%' or package_version_name not like '%)%' THEN CONCAT(package_version_name, '(',version_number,')') else package_version_name as final_version_field
       CASE WHEN package_version_name NOT LIKE '%(%' or package_version_name not like '%)%' THEN CONCAT(package_version_name, '(',skuid_version_number,')') else package_version_name end skuid_release, 
       sf_li.sf_lma_seats_c subscription_count,
       sf_li.sf_lma_used_licenses_c subscriptions_used,
       case when subscription_count > 0 then subscriptions_used::decimal(10,2)/subscription_count::decimal(10,2) else -1::decimal(10,2) end utilization,
       case when sf_li.sf_lma_org_type_c LIKE 'Developer%' then TRUE::boolean else FALSE::boolean end is_developer,
       l.id lead_id,
       l.email lead_email,
       l.has_opted_out_of_email lead_email_opt_out,
       l.title,
       l.industry,
       l.behavior_score_c behavior_score,
       l.demographic_score_c demographic_score,
       l.webinar_score_c webinar_score,
       coalesce(l.behavior_score_c,0) + coalesce(l.demographic_score_c,0) + coalesce(l.webinar_score_c,0) combined_lead_score,
       c.id contact_id,
       c.email contact_email,
       c.has_opted_out_of_email contact_email_opt_out,
       sf_li.installation_category_c            AS installation_category,
       case when sf_li.sf_lma_subscriber_org_is_sandbox_c = TRUE then 'Sandbox' when is_developer = TRUE then 'Developer' else 'Production' end org_category,
       l.datahugapps_ma_c                       AS matched_account,
       case when not c.id is null then 'Contact' when not l.id is null then 'Lead' else 'Unknown' end installer_type,
       coalesce(c.id,l.id) lead_or_contact_id,
       coalesce(c.name,l.name) lead_or_contact_name,
       coalesce(c.owner_id,l.owner_id) lead_or_contact_owner_id,
       coalesce(sf_c_o.name,sf_c_o_g.developer_name,sf_l_o.name,sf_l_o_g.developer_name) lead_or_contact_owner_name,
       coalesce(c.account_id,l.datahugapps_ma_c) account_id,
       coalesce(sf_c_a.name,sf_l_a.name) account_name,
       coalesce(sf_c_a.vertical_c,sf_l_a.vertical_c) account_vertical,
       coalesce(sf_c_a.type,sf_l_a.type) account_type,
       coalesce(sf_c_a.segment, sf_l_a.segment) account_segment,
       coalesce(sf_c_a.owner_id,sf_l_a.owner_id) account_owner_id,
       coalesce(sf_c_a_o.name, sf_l_a_o.name) account_owner_name
FROM {{source('salesforce','license')}} sf_li
    left join {{source('salesforce','package_version')}} pv
        on sf_li.sf_lma_package_version_c=pv.id
    left join {{source('salesforce','package')}} pk
        on pv.sf_lma_package_c=pk.id
    LEFT JOIN {{source('salesforce','contact')}} c
        ON sf_li.sf_lma_contact_c=c.id
    LEFT JOIN {{source('salesforce','lead')}} l
        ON sf_li.sf_lma_lead_c=l.id
    left join {{source('salesforce','account')}} sf_c_a -- salesforce contact account
        on c.account_id=sf_c_a.id
    left join {{source('salesforce','account')}} sf_l_a -- salesforce lead account
        on l.datahugapps_ma_c=sf_l_a.id
    left join {{source('salesforce','user')}} sf_c_a_o -- salesforce contact account owner
        on sf_c_a.owner_id=sf_c_a_o.id
    left join {{source('salesforce','user')}} sf_l_a_o -- salesforce lead account owner
        on sf_l_a.owner_id=sf_l_a_o.id
    left join {{source('salesforce','user')}} sf_c_o -- salesforce contact owner
        on c.owner_id=sf_c_o.id
    left join {{source('salesforce','user')}} sf_l_o -- salesforce lead owner
        on c.owner_id=sf_l_o.id
    left join {{source('salesforce','group')}} sf_l_o_g -- salesforce lead owner group
        on c.owner_id=sf_l_o_g.id
    left join {{source('salesforce','group')}} sf_c_o_g -- salesforce contact owner group
        on c.owner_id=sf_c_o_g.id
    where not sf_li.is_deleted