2

是否有类似 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 在这里不起作用,我不知道为什么

4

3 回答 3

8

您始终可以使用案例:

select  case when cu.email is null or cu.email = '' then hu.email 
             else cu.email end as ColumnName
from    YourTable
于 2010-09-15T18:57:23.273 回答
3

看看NULLIF (Transact-SQL)

如果两个表达式不相等,则 NULLIF 返回第一个表达式。如果表达式相等,则 NULLIF 返回第一个表达式类型的空值。

试试这个:

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

如果 cu.email 和 hu.email 是空字符串或 NULL 的任意组合,将返回 NULL

于 2010-09-15T19:08:49.777 回答
1

这将捕获 null 或空 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
于 2010-09-15T19:00:11.327 回答