Условные выражения в списках столбцов transact-sql select - PullRequest
1 голос
/ 26 июня 2009

У меня есть запрос, который выглядит примерно так:

select
records.id,
contacts.name + ' (' + contacts.organization + ')' as contact,
from records
left join contacts on records.contact = contacts.contactid

Проблема в том, что * contacts.organization часто пусто, и я получаю контакты типа "Джон Смит ()". Есть ли способ объединить организацию, только если она не пуста?

Ответы [ 5 ]

2 голосов
/ 26 июня 2009

Использовать оператор CASE

SELECT
records.id,
CASE contacts.organization
    WHEN '' THEN contacts.name
    ELSE contacts.name + ' (' + contacts.organization + ')'
END as Contact
FROM records
LEFT JOIN contacts ON records.contact = contacts.contactid

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

1 голос
/ 26 июня 2009

используйте CASE, например, CASE, когда contacts.organization не null, а затем '(' + c.o + ')' else '' end

1 голос
/ 26 июня 2009

Не уверен, что это лучший способ сделать это:

CASE contacts.organization
WHEN '' THEN ''
ELSE '(' + contacts.organzation + ')' END
0 голосов
/ 26 июня 2009

Если вы имеете дело со значениями NULL, есть некоторые функции, которые специализируются на них, которые стоит знать.

NULLIF () может быть тот, кого вы ищете. Это в основном занимает два параметра. Он возвращает первый параметр, если он не равен NULL, в противном случае он возвращает второй.

Вот мой приблизительный код:

select
records.id,
contacts.name + ISNULL(' (' + contacts.organization + ')', '') as contact,
from records
left join contacts on records.contact = contacts.contactid

Большинство связанных с NULL функций можно заменить более крупным оператором CASE. CASE - ваш более общий инструмент. Но использование определенных функций сделает ваш код чище или, по крайней мере, более кратким.

0 голосов
/ 26 июня 2009

Вы всегда должны ожидать нули, потому что ваше внешнее соединение:

select
records.id,
contacts.name + CASE WHEN contacts.organization IS NULL OR contacts.organization='' THEN '' ELSE ' (' + contacts.organization + ')' END as contact,
from records
left join contacts on records.contact = contacts.contactid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...