У меня проблемы с преобразованием кода, который я написал, чтобы изначально игнорировать нулевые значения, в тот, который принимает и преобразует нулевые значения в 0.
Предложение where удаляет все значения, где ladder_advocacy = null.Мы также используем это в выражении case.
Тем не менее, меня действительно волнует, когда ladder_advocacy (Etc) равны нулю.Когда человек впервые присоединяется к организации, его значения в лестнице по умолчанию равны нулюВ своем анализе я хочу узнать, сколько людей перешло из A B, B E и т. Д., А также из NULL -> B, NULL -> E.Прямо сейчас в запросе серьезно недооцениваются любые изменения, потому что мы знаем, что некоторый процент людей на самом деле сначала не присоединяются к организации на лестничном уровне (скажем, как С1), а сначала присоединяются как нулевые.
Я не уверен, как обойти это, чтобы исправить это.
Это оригинальный код:
CREATE TEMPORARY TABLE cte_leenk_ladder_history_order
SELECT
lh.member_id
,sc.salesforce_id
,sc.lastname
,trigger_record_id
,ladder_change
,date_trigger_event
,@ladder_value
,lh.ladder_config_id AS ladder_config_id
,trigger_name
,lc.active as config_active
,lc.`trigger` as trigger_active
,COALESCE(lh.ladder_advocacy,lh.ladder_elected,lh.ladder_policy,lh.ladder_organizing,lh.ladder_organizing,lh.ladder_engagement) AS ladder_value
,CASE WHEN lh.ladder_advocacy IS NOT NULL THEN 'ladder_advocacy'
WHEN lh.ladder_elected IS NOT NULL THEN 'ladder_elected'
WHEN lh.ladder_policy IS NOT NULL THEN 'ladder_policy'
WHEN lh.ladder_organizing IS NOT NULL THEN 'ladder_organizing'
WHEN lh.ladder_collective IS NOT NULL THEN 'ladder_collective'
WHEN lh.ladder_engagement IS NOT NULL THEN 'ladder_engagement'
END
AS ladder_name
FROM leeds_new.leenk_ladder_history AS lh
INNER JOIN leeds_new.leenk_ladder_config AS lc ON lh.ladder_config_id = lc.ladder_config_id
INNER JOIN leeds_new.salesforce_contacts AS sc ON lh.member_id = sc.salesforce_id
WHERE lh.ladder_advocacy IS NOT NULL
ORDER BY date_trigger_event DESC;
Я попытался сделать грубую функцию для преобразования нуля -> 0 ввременная таблица перед этой первой и затем присоединяющаяся к ней:
CREATE TEMPORARY TABLE cte_ladder_levels_to_non_null
SELECT
member_id,
COALESCE(ladder_advocacy, 0) AS ladder_advocacy,
COALESCE(ladder_elected, 0) AS ladder_elected,
COALESCE(ladder_policy, 0) AS ladder_policy,
COALESCE(ladder_organizing, 0) AS ladder_organizing,
COALESCE(ladder_engagement, 0) AS ladder_engagement,
COALESCE(ladder_collective, 0) AS ladder_collective
FROM
leeds_new.leenk_ladder_history;
CREATE TEMPORARY TABLE cte_leenk_ladder_history_order
SELECT
lh.member_id
,sc.salesforce_id
,sc.lastname
,trigger_record_id
,ladder_change
,date_trigger_event
,@ladder_value
,lh.ladder_config_id AS ladder_config_id
,trigger_name
,lc.active as config_active
,lc.`trigger` as trigger_active
,COALESCE(
cte_ladder_levels_to_non_null.ladder_advocacy,
cte_ladder_levels_to_non_null.ladder_elected,
cte_ladder_levels_to_non_null.ladder_policy,
cte_ladder_levels_to_non_null.ladder_organizing,
cte_ladder_levels_to_non_null.ladder_organizing,
cte_ladder_levels_to_non_null.ladder_engagement) AS ladder_value
,CASE WHEN lh.ladder_advocacy IS NOT NULL THEN 'ladder_advocacy'
WHEN lh.ladder_elected IS NOT NULL THEN 'ladder_elected'
WHEN lh.ladder_policy IS NOT NULL THEN 'ladder_policy'
WHEN lh.ladder_organizing IS NOT NULL THEN 'ladder_organizing'
WHEN lh.ladder_collective IS NOT NULL THEN 'ladder_collective'
WHEN lh.ladder_engagement IS NOT NULL THEN 'ladder_engagement'
END
AS ladder_name
FROM leeds_new.leenk_ladder_history AS lh
inner join cte_ladder_levels_to_non_null as llnn on lh.member_id = llnn.member_id
INNER JOIN leeds_new.leenk_ladder_config AS lc ON lh.ladder_config_id = lc.ladder_config_id
INNER JOIN leeds_new.salesforce_contacts AS sc ON lh.member_id = sc.salesforce_id
WHERE lh.ladder_advocacy IS NOT NULL
ORDER BY date_trigger_event DESC;
Но я получаю сообщение об ошибке «недопустимое имя поля» с этой строкой: cte_ladder_levels_to_non_null.ladder_advocacy (и уровни лестниц, которые следуют за ней).
Я также пытался удалить предложение where, но это тоже не решает проблему, потому что оно портит регистр.
Мысли?Спасибо!