Isnull эквивалент для пустых полей
Есть ли что-то вроде ISNULL() или COALESCE (), но не то, что проверяет значение null, а пустое значение.
Например:
SELECT cu.last_name, cu.first_name, cu.email, hu.email FROM
(SELECT DISTINCT c.first_name, c.last_name, c.email, c.household_id, h.head_of_household_id
FROM rd_customers c
JOIN rd_households h ON c.household_id = h.household_id
JOIN ad_registrations r ON r.customer_id = c.customer_id
JOIN ad_meeting_times a ON r.session_id = a.session_id and a.meeting_time_id = 203731) cu
LEFT JOIN rd_customers hu ON hu.customer_id = cu.head_of_household_id
Вместо того, чтобы возвращать четыре столбца, я хотел бы получить три, а третий, предположим, имеет значения любого из cu.электронная почта или ху.электронная почта, если первая пуста! ISNULL и COALESCE здесь не работают я не знаю почему
3 ответа:
Вы всегда можете использовать case:
select case when cu.email is null or cu.email = '' then hu.email else cu.email end as ColumnName from YourTable
Посмотрите на NULLIF (Transact-SQL)
NULLIF возвращает первое выражение, Если эти два выражения не равны. Если выражения равны, функция nullif возвращает нулевое значение типа первое выражение.
Попробуйте это:
COALESCE(NULLIF(cu.email,''),NULLIF(hu.email,''))
Вернет NULL, если cu.электронная почта и Ху.электронная почта-это любая комбинация пустой строки или NULL
Это будет ловить null или пустой cu.электронной почты и Ху.вместо электронной почты:
SELECT cu.last_name, cu.first_name, CASE WHEN ISNULL(cu.email, '') = '' THEN hu.email ELSE cu.email END AS email FROM ( SELECT DISTINCT c.first_name, c.last_name, c.email, c.household_id, h.head_of_household_id FROM rd_customers c JOIN rd_households h ON c.household_id = h.household_id JOIN ad_registrations r ON r.customer_id = c.customer_id JOIN ad_meeting_times a ON r.session_id = a.session_id AND a.meeting_time_id = 203731 ) cu LEFT JOIN rd_customers hu ON hu.customer_id = cu.head_of_household_id