将多个 Case 语句组合成单个输出列

Combining multiple Case statements into single output column

我需要通过匹配特定条件将具有 10 个唯一值的列 marketing_channel 重新分类为 15 个不同的组。 我已经通过 case 语句完成了此操作,但输出在 15 个新列中。

  1. 是否有更优雅的方法来重新class marketing_channel,只需添加 1 个额外的列,例如包含所有新的 15 个 class 的 "marketing_sub_channel"
  2. 有没有比创建 15 个 case 语句更好的方法来完成 class化?正在考虑一个 with 子句,但这也很长

输出看起来像这样,但最终只需添加一个列就可以了:

是的,您只需稍微更改一下格式即可。删除每行开头的“case”语句,只将“End”放在语句的末尾,如下所示:

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN conditionN THEN resultN
    ELSE null
END as marketing_sub_channel

或者您的情况:

CASE
    WHEN medium like ('%affiliate%') or marketing_cannel ='Affiliates' then 'Affiliate'
    WHEN campaign like ('%_Display brand_global Progromatic Display%') then 'Dispay' 
    WHEN campaign like ('%display%') and campaign not like ('progrommatic') then 'Dispay'
    ....
    else null
END as marketing_sub_channel

我还想指出,在你的案例陈述中,因为你有 '%display%' 和 '%_Display brand_global Progromatic Display%',所以你把较长的更具体的放在上面,这样它就可以如果需要触发。如果“%display%”在最上面,那么它将始终首先触发,因为它包含另一个的子字符串。