Я пытаюсь сгруппировать данные по разным периодам времени, и мне это не удается. Я хотел бы назвать эти периоды времени «онбордингом» и «в жизни», но Тердата мне не позволяет. Кто-нибудь знает, почему он продолжает кричать, что мой пункт when незаконен?
SELECT
CASE
MONTHS_BETWEEN (business_dt, CAST(LOYALITY_START_DATE_CRM AS DATE))
WHEN
MONTHS_BETWEEN (business_dt, CAST(LOYALITY_START_DATE_CRM AS DATE)) > 0
AND
MONTHS_BETWEEN (business_dt, CAST(LOYALITY_START_DATE_CRM AS DATE)) < 3 then 'onboarding'
WHEN
MONTHS_BETWEEN (business_dt, CAST(LOYALITY_START_DATE_CRM AS DATE)) > 3
AND
MONTHS_BETWEEN (business_dt, CAST(LOYALITY_START_DATE_CRM AS DATE)) < 18 then 'in-life'
else 'eop'
END AS life_cycle,
COUNT (*) Number_of_contracts
FROM
VT_DM_CUMULATIVE_EXT.mobile_events
GROUP BY
life_cycle
WHERE
business_dt='2020-11-30'
;
ПОЖАЛУЙСТА ПОМОГИТЕ


Вы комбинируете простые и поисковые операторы case. Избавьтесь от первого предложения MONTHS_BETWEEN.
SELECT
CASE
WHEN
MONTHS_BETWEEN (business_dt, CAST(LOYALITY_START_DATE_CRM AS DATE)) > 0
AND
MONTHS_BETWEEN (business_dt, CAST(LOYALITY_START_DATE_CRM AS DATE)) < 3 then 'onboarding'
...