Синтаксис оператора SQL - PullRequest
1 голос
/ 27 мая 2009

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

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

Ответы [ 3 ]

11 голосов
/ 27 мая 2009

Вам нужна функция COALESCE (...) :

SELECT COALESCE(t.Email3, t.Email2, t.Email1) FROM MyTable t
5 голосов
/ 27 мая 2009

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

SELECT COALESCE(Email3, Email2, Email1) ...
2 голосов
/ 27 мая 2009

Смотрите другие ответы о COALESCE, но если вы действительно хотите структуру 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

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

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

Обратите внимание, что функция SQL Server CASE не пропускает случаи - как только она соответствует одному, вот и все. Нет необходимости в "перерыв".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...