删除 Select 语句中的空字段

Remove Empty Fields in Select Statement

我有一个select声明如下:

SELECT
    firstName,
    lastName, 
    CASE
        WHEN primaryEmail <> 'name@example.com' THEN primaryEmail
        WHEN secondaryEmail <> 'name@example.com' THEN secondaryEmail 
        ELSE ternaryEmail 
    END AS email
FROM participant 
WHERE 
    primaryEmail <> 'name@example.com' 
    OR secondaryEmail <> 'name@example.com' 
    OR ternaryEmail <> 'name@example.com'

问题是有些记录的字段为空,firstName、lastName 或生成的电子邮件。我将其添加到 WHERE 子句中:

firstName IS NOT NULL
AND lastName IS NOT NULL
AND primaryEmail <> // The already existing WHERE clause code.

但这些字段仍然显示。我还没有费心尝试摆脱电子邮件部分,所以我没有代码可以在那里显示。

你需要or逻辑,而不是and

where 
(firstName is not null or lastName is not null)
and other conditions
   SELECT
        firstName,
        lastName, 
        CASE
            WHEN primaryEmail <> 'name@example.com' THEN primaryEmail
            WHEN secondaryEmail <> 'name@example.com' THEN secondaryEmail 
            ELSE ternaryEmail 
        END AS email
    FROM participant 
    WHERE 
        (primaryEmail <> 'name@example.com' AND primaryEmail IS NOT NULL) OR
        (secondaryEmail <> 'name@example.com' AND secondaryEmail IS NOT NULL) OR
        (ternaryEmail <> 'name@example.com' AND ternaryEmail IS NOT NULL)

这个问题是T-SQL中的一个棘手问题。我确实找到了这个问题的答案,并且确切地了解了编译器如何查看 Blank space 或 NULL 的每个 "type"。

http://weblogs.sqlteam.com/mladenp/archive/2007/09/06/How_does_SQL_Server_really_store_NULL-s.aspx