Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Если найдено вывести только найденное, если нет, то вывести всё  [new]
SABROG
Member

Откуда:
Сообщений: 50
Не могу понять как написать запрос таким образом, что если условие выполняется, то вывести только записи удовлетворяющие этому условию, а если таких записей нет, то вывести всё что есть.
27 окт 17, 12:32    [20905940]     Ответить | Цитировать Сообщить модератору
 Re: Если найдено вывести только найденное, если нет, то вывести всё  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
SABROG,

и как понимать потом что же произошло и что я вообще получил?
27 окт 17, 12:34    [20905955]     Ответить | Цитировать Сообщить модератору
 Re: Если найдено вывести только найденное, если нет, то вывести всё  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
да они сейчас не то что писать, говорить не умеют.
а хочет он типа как в репортинге, если параметр передан, отфильтровать,
а если NULL в параметре, вывести все данные
27 окт 17, 12:38    [20905974]     Ответить | Цитировать Сообщить модератору
 Re: Если найдено вывести только найденное, если нет, то вывести всё  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
зависит от условия, смотри FAQ
27 окт 17, 12:40    [20905987]     Ответить | Цитировать Сообщить модератору
 Re: Если найдено вывести только найденное, если нет, то вывести всё  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Yasha123,

Тогда
@Value IS NULL OR @Value = <cond>
27 окт 17, 12:40    [20905988]     Ответить | Цитировать Сообщить модератору
 Re: Если найдено вывести только найденное, если нет, то вывести всё  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
хотя нет, он сперва ищет, а потом решает, надо ему это или не не это,
щас примерчик сляпаем
27 окт 17, 12:40    [20905989]     Ответить | Цитировать Сообщить модератору
 Re: Если найдено вывести только найденное, если нет, то вывести всё  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
SELECT * FROM ... WHERE <Condition>
UNION ALL
SELECT * FROM ... WHERE NOT EXISTS(SELECT * FROM ... WHERE <Condition>);
27 окт 17, 12:41    [20905992]     Ответить | Цитировать Сообщить модератору
 Re: Если найдено вывести только найденное, если нет, то вывести всё  [new]
Добрый Э - Эх
Guest
SABROG,

[not] exists
27 окт 17, 12:42    [20906000]     Ответить | Цитировать Сообщить модератору
 Re: Если найдено вывести только найденное, если нет, то вывести всё  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
	declare @t table (id int);
	insert into @t values (1), (2), (3);

	declare @param int = 1 --4;

	select *
	from @t
	where id = @param

	union all

	select *
	from @t
	where not exists (select * from @t where id = @param);
27 окт 17, 12:43    [20906010]     Ответить | Цитировать Сообщить модератору
 Re: Если найдено вывести только найденное, если нет, то вывести всё  [new]
SABROG
Member

Откуда:
Сообщений: 50
Спасибо за ответы, но ваши варианты выводят просто все записи что есть, т.к. в первом запросе сначала выводится то, что удовлетворяет условию, а во втором те записи, которые остаются после того как были отсечены записи удовлетворяющие условию.
Мне же нужно, чтобы в случае найденных строк вывести только их и не выводить во втором объединении все оставшееся. Но в случае, если в первом запросе ничего не найдено, то вывести всё что есть.
27 окт 17, 13:04    [20906182]     Ответить | Цитировать Сообщить модератору
 Re: Если найдено вывести только найденное, если нет, то вывести всё  [new]
Добрый Э - Эх
Guest
SABROG,

потому что без репрезентативных и юзабильных тестовых данных никто запрос не проверяет, а пишет из головы... а голова не компьютер - может и не учесть чего-нибудь...
27 окт 17, 13:05    [20906203]     Ответить | Цитировать Сообщить модератору
 Re: Если найдено вывести только найденное, если нет, то вывести всё  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
Yasha123,

и сколько раз в вашем варианте будет читаться таблица @t?
почему бы тогда не:
if (<Condition>)
(select ... where <Condition>)
else
(select ...)
27 окт 17, 13:06    [20906206]     Ответить | Цитировать Сообщить модератору
 Re: Если найдено вывести только найденное, если нет, то вывести всё  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
SABROG
Мне же нужно, чтобы в случае найденных строк вывести только их и не выводить во втором объединении все оставшееся. Но в случае, если в первом запросе ничего не найдено, то вывести всё что есть.
select ... where <Condition>
if @@rowcount != 0 (select ...)
27 окт 17, 13:09    [20906232]     Ответить | Цитировать Сообщить модератору
 Re: Если найдено вывести только найденное, если нет, то вывести всё  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
SABROG
Спасибо за ответы, но ваши варианты выводят просто все записи что есть, т.к. в первом запросе сначала выводится то, что удовлетворяет условию, а во втором те записи, которые остаются после того как были отсечены записи удовлетворяющие условию.
Мне же нужно, чтобы в случае найденных строк вывести только их и не выводить во втором объединении все оставшееся. Но в случае, если в первом запросе ничего не найдено, то вывести всё что есть.

IF @@ROWCOUNT = 0 SELECT * FROM <table>
27 окт 17, 13:10    [20906236]     Ответить | Цитировать Сообщить модератору
 Re: Если найдено вывести только найденное, если нет, то вывести всё  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
Дедушка,
вместо != 0 нужно конечно же = 0 :)
27 окт 17, 13:10    [20906244]     Ответить | Цитировать Сообщить модератору
 Re: Если найдено вывести только найденное, если нет, то вывести всё  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
SABROG
но ваши варианты выводят просто все записи что есть, т.к. в первом запросе сначала выводится то, что удовлетворяет условию, а во втором те записи, которые остаются после того как были отсечены записи удовлетворяющие условию.
Серьёзно?
Что вы вообще знаете про NOT EXISTS()?
27 окт 17, 13:13    [20906257]     Ответить | Цитировать Сообщить модератору
 Re: Если найдено вывести только найденное, если нет, то вывести всё  [new]
SABROG
Member

Откуда:
Сообщений: 50
iap
SABROG
но ваши варианты выводят просто все записи что есть, т.к. в первом запросе сначала выводится то, что удовлетворяет условию, а во втором те записи, которые остаются после того как были отсечены записи удовлетворяющие условию.
Серьёзно?
Что вы вообще знаете про NOT EXISTS()?

Прошу прощения. На MSSQL работает, при попытке адаптировать к другому языку запросов - ведет себя иначе.
27 окт 17, 13:20    [20906301]     Ответить | Цитировать Сообщить модератору
 Re: Если найдено вывести только найденное, если нет, то вывести всё  [new]
Гость проходящий мимо
Guest
SABROG,

if exists ни кто не отменял!
27 окт 17, 16:11    [20907243]     Ответить | Цитировать Сообщить модератору
 Re: Если найдено вывести только найденное, если нет, то вывести всё  [new]
Гость проходящий мимо
Guest
SABROG,

if exists(select COLUMNNAME from dbo.TABLENAME where CONDITION)
select ***
else
select ***
27 окт 17, 16:14    [20907256]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить