ISNULL эквивалент для пустых полей - PullRequest
2 голосов
/ 15 сентября 2010

Есть что-то вроде ISNULL () ИЛИ COALESCE (), но проверяет не нулевое значение, а пустое значение.

например:

  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.email или hu.email, если первое - ПУСТО!ISNULL и COALESCE здесь не работают, я не знаю, почему

Ответы [ 3 ]

8 голосов
/ 15 сентября 2010

Вы всегда можете использовать регистр:

select  case when cu.email is null or cu.email = '' then hu.email 
             else cu.email end as ColumnName
from    YourTable
3 голосов
/ 15 сентября 2010

посмотрите на NULLIF (Transact-SQL)

NULLIF возвращает первое выражение, если два выражения не равны. Если выражения равны, NULLIF возвращает нулевое значение типа первое выражение.

попробуйте это:

COALESCE(NULLIF(cu.email,''),NULLIF(hu.email,''))

вернет NULL, если cu.email и hu.email представляют собой любую комбинацию пустой строки или NULL

1 голос
/ 15 сентября 2010

Это будет перехватывать пустое или пустое cu.email и использовать вместо него hu.email:

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
...