Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 XOR select  [new]
kanter
Guest
Здравствуйте, уважаемые. Вопрос вроде бы не сложный, но меня поставил в тупик: нужно получить значение с выборки, но если условию не находится ни одной записи, нужно вывести значение по-умолчанию.
Нечто похожее на это, вот только у меня если условие Field1='foo' удовлетворено и в таблице больше 1 записи то 'bar' тоже появляется, а не должен:
select Field1 from MyTable where Field1='foo'
union
select top 1 'bar' as Field1 from MyTable where Field1!='foo'

Фактически надо так: либо выводятся все записи с 'foo', либо только одна запись 'bar'. Кто знает, подскажите пожалуйста как сделать правильно. Благодарю :)
5 фев 14, 15:21    [15523190]     Ответить | Цитировать Сообщить модератору
 Re: XOR select  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
SELECT ISNULL((SELECT Field1 FROM MyTable WHERE Field1='foo'),'bar')
WHERE EXISTS(SELECT * FROM MyTable);
Это если для пустой таблицы не надо ничего выводить.
Если надо - уберите WHERE
5 фев 14, 15:30    [15523266]     Ответить | Цитировать Сообщить модератору
 Re: XOR select  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
iap
SELECT ISNULL((SELECT Field1 FROM MyTable WHERE Field1='foo'),'bar')
WHERE EXISTS(SELECT * FROM MyTable);

Это если для пустой таблицы не надо ничего выводить.
Если надо - уберите WHERE
Ой! Это неправильно. Если SELECT вернёт более 1 записи
5 фев 14, 15:31    [15523277]     Ответить | Цитировать Сообщить модератору
 Re: XOR select  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
SELECT Field1 FROM MyTable WHERE Field1='foo'
UNION ALL
SELECT 'bar' WHERE NOT EXISTS(SELECT * FROM MyTable WHERE Field1='foo');
5 фев 14, 15:36    [15523327]     Ответить | Цитировать Сообщить модератору
 Re: XOR select  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
SELECT Field1 FROM MyTable WHERE Field1='foo'
UNION ALL
SELECT 'bar' WHERE NOT EXISTS(SELECT * FROM MyTable WHERE Field1='foo');
5 фев 14, 15:36    [15523329]     Ответить | Цитировать Сообщить модератору
 Re: XOR select  [new]
kanter
Guest
Премного благодарен, это то, что нужно!
5 фев 14, 15:39    [15523355]     Ответить | Цитировать Сообщить модератору
 Re: XOR select  [new]
kanter
Guest
iap, в последнем UNION ALL добавляет много лишних записей, без ALL работает лучше :) Спасибо ещё раз!
5 фев 14, 15:46    [15523408]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить