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

Откуда:
Сообщений: 48
Есть процедура, которая возвращает список счетов.
Нужно в зависимости от параметра @ShowClosed вернуть
1) только не закрытые счета (@ShowClosed=0)
2) только закрытые счета (@ShowClosed=1)
3) все счета - и закрытые, и не закрытые (@ShowClosed IS NULL)

Подскажите, можно ли в данном случае обойтись одним запросом,
без использования динамического запроса, и
без конструкции типа

IF @ShowClosed IS NULL
SELECT * FROM acc
ELSE
begin
IF @ShowClosed=0
SELECT * FROM acc WHERE acc.DateClose IS NULL
ELSE
SELECT * FROM acc WHERE acc.DateClose NOT IS NULL
end
13 мар 03, 12:24    [146414]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как тут с WHERE быть  [new]
tygra
Member

Откуда: Тверь (Иркутск, Край)
Сообщений: 9997
SELECT * FROM acc where 

1 = case
when @ShowClosed is null then 1
when @ShowClosed = 0 and acc.DateClose IS NULL then 1
when @ShowClosed = 1 and acc.DateClose IS not NULL then 1
else 0
end
13 мар 03, 12:30    [146426]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как тут с WHERE быть  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
ну дык прямо так и писать
@ShowClosed=0 

SELECT * FROM acc
WHERE (acc.DateClose IS NULL and @ShowClosed=0) or
(acc.DateClose IS not NULL and @ShowClosed=1) or
@ShowClosed is null
13 мар 03, 12:31    [146431]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить