2009-05-27 5 views
1

Я пытаюсь написать оператор select, который выберет несколько полей, включая поле электронной почты. В этой таблице доступно 3 поля электронной почты, которые иногда могут содержать нулевые значения. Я захотел посмотреть на 3 поля; [адрес электронной почты1], [адрес электронной почты2], [адрес электронной почты3] и в основном то, что я хочу сделать, это если [адрес электронной почты3] равен нулю, тогда я хочу значение в [адрес электронной почты2], если адрес электронной почты2 равен нулю, чем я хочу значение in [адрес электронной почты1]SQL Case statement Синтаксис

Я не могу получить Синтаксис правильно и не слишком уверен, что я делаю неправильно.

+0

Рассмотрите вопрос о названии вопроса, чтобы лучше соответствовать ответам –

ответ

11

Что вам нужно COALESCE(...) function:

SELECT COALESCE(t.Email3, t.Email2, t.Email1) FROM MyTable t 
+1

Хороший вызов, хотя я думаю, что вопросник должен будет изменить аргументы. –

+1

неправильный порядок аргументов? проверьте с вопросом – devio

+0

Я думаю, что порядок верен, вопрос сформулирован странным образом. – van

5

Нет необходимости в случае, вы можете также использовать COALESCE («Возвращает первое ненулевое выражение среди своих аргументов»):

SELECT COALESCE(Email3, Email2, Email1) ... 
2

другие ответы о COALESCE, но если вы действительно хотите a CASE-структура, это должно сделать это:

CASE 
    WHEN email3 IS NOT NULL THEN email3 
    WHEN email2 IS NOT NULL THEN email2 
    WHEN email1 IS NOT NULL THEN email1 
    ELSE '' 
END 

Я добавил еще пункт, чтобы предотвратить возвращение Нуль от всего этого, но если это то, что вы хотите, чтобы это произошло, когда все три Null вы можете использовать:

CASE 
    WHEN email3 IS NOT NULL THEN email3 
    WHEN email2 IS NOT NULL THEN email2 
    ELSE email1 
END 

Обратите внимание, что функция СЛУЧАЯ SQL Server не падает через случаи - как только он соответствует одному, вот и все. Нет необходимости в «перерыве».