I'm trying to cluster the clients based on the conditions of the case expression below, everything was going fine until I've added this - AND pbs.pb_plano_assinatura != "Anual" - after that, it duplicates some lines and the value of the column corresponded to this case expression becomes null. I would love any kind of advice on how to do this kind of operation as this query involves multiple joins so I think I can't turn it into a materialized view.
CASE
WHEN ((IF (o.order_created_at < pbs.pb_dt_onboarding, date(pbs.pb_dt_primeiro_onboarding), date(pbs.pb_dt_onboarding))) < date("2021-02-25") AND pbs.pb_plano_assinatura != "Anual") THEN "Mensal Antigo"
WHEN ((IF (o.order_created_at < pbs.pb_dt_onboarding, date(pbs.pb_dt_primeiro_onboarding), date(pbs.pb_dt_onboarding))) >= date("2021-02-25") and (IF (o.order_created_at < pbs.pb_dt_onboarding, date(pbs.pb_dt_primeiro_onboarding), date(pbs.pb_dt_onboarding))) < date("2021-06-02") AND pbs.pb_plano_assinatura != "Anual") and pb_codigo_promocional is NULL THEN "Mensal Pgto Entrada"
WHEN ((IF (o.order_created_at < pbs.pb_dt_onboarding, date(pbs.pb_dt_primeiro_onboarding), date(pbs.pb_dt_onboarding))) >= date("2021-06-02") AND pbs.pb_plano_assinatura != "Anual") THEN "Mensal Gratuidade"
WHEN ((IF (o.order_created_at < pbs.pb_dt_onboarding, date(pbs.pb_dt_primeiro_onboarding), date(pbs.pb_dt_onboarding))) >= date("2021-02-25") and (IF (o.order_created_at < pbs.pb_dt_onboarding, date(pbs.pb_dt_primeiro_onboarding), date(pbs.pb_dt_onboarding))) < date("2021-06-02") AND pbs.pb_plano_assinatura != "Anual") and pb_codigo_promocional is not NULL THEN "Mensal Cupom"
WHEN (pbs.pb_plano_assinatura = "Anual" AND p.value >= 250.0 AND p.status IN('RECEIVED' ,'CONFIRMED', 'RECEIVED_IN_CASH') AND p.originalDueDate = min(p.originalDueDate) over (partition by pbs.pb_id)) OR PBS.pb_id = 'ddcdff35-a044-5ccc-a65d-7e51692b269a' THEN "Anual Entrada"
WHEN ((IF (o.order_created_at < pbs.pb_dt_onboarding, date(pbs.pb_dt_primeiro_onboarding), date(pbs.pb_dt_onboarding))) < date("2021-02-25"))AND(pbs.pb_plano_assinatura = "Anual" AND p.value < 250.0 AND p.status IN('RECEIVED' ,'CONFIRMED', 'RECEIVED_IN_CASH') AND p.originalDueDate = min(p.originalDueDate) over (partition by pbs.pb_id)) THEN "Mensal Antigo"
WHEN ((IF (o.order_created_at < pbs.pb_dt_onboarding, date(pbs.pb_dt_primeiro_onboarding), date(pbs.pb_dt_onboarding))) >= date("2021-02-25")and (IF (o.order_created_at < pbs.pb_dt_onboarding, date(pbs.pb_dt_primeiro_onboarding), date(pbs.pb_dt_onboarding))) < date("2021-06-02")) and pb_codigo_promocional is NULL AND(pbs.pb_plano_assinatura = "Anual" AND p.value < 250.0 AND p.status IN('RECEIVED' ,'CONFIRMED', 'RECEIVED_IN_CASH') AND p.originalDueDate = min(p.originalDueDate) over (partition by pbs.pb_id)) THEN "Mensal Pgto Entrada"
WHEN ((IF (o.order_created_at < pbs.pb_dt_onboarding, date(pbs.pb_dt_primeiro_onboarding), date(pbs.pb_dt_onboarding))) >= date("2021-06-02"))AND(pbs.pb_plano_assinatura = "Anual" AND p.value < 250.0 AND p.status IN('RECEIVED' ,'CONFIRMED', 'RECEIVED_IN_CASH') AND p.originalDueDate = min(p.originalDueDate) over (partition by pbs.pb_id)) THEN "Mensal Gratuidade"
WHEN ((IF (o.order_created_at < pbs.pb_dt_onboarding, date(pbs.pb_dt_primeiro_onboarding), date(pbs.pb_dt_onboarding))) >= date("2021-02-25")AND (IF (o.order_created_at < pbs.pb_dt_onboarding, date(pbs.pb_dt_primeiro_onboarding), date(pbs.pb_dt_onboarding))) < date("2021-06-02")) and pb_codigo_promocional is not NULL AND(pbs.pb_plano_assinatura = "Anual" AND p.value < 250.0 AND p.status IN('RECEIVED' ,'CONFIRMED', 'RECEIVED_IN_CASH') AND p.originalDueDate = min(p.originalDueDate) over (partition by pbs.pb_id)) THEN "Mensal Cupom"
END as pb_safra,