Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Использование CASE WHEN в WHERE


Автор: lv151 3.5.2012, 10:26
Возможно ли построить запрос так, чтобы условие в WHERE проверялось в зависимосит от параметра, 
или лучше сделать похожее c помощью AND, OR?

Код

SELECT * from Table1 t1
WHERE
CASE WHEN @q = 1 THEN (t1.a1 <> 0  AND t1.a1 <> 2) 
         WHEN @q = 2 THEN (t1.a1 <> 0 AND t1.a1 <> 3) 
END

Автор: Akina 3.5.2012, 10:35
Да, возможно. Но секция Then при этом должна возвращать логическое True или False.

В приведённом же примере достаточно

Код

WHERE t1.a1 <> 0  AND t1.a1 <> 1 + @q

Автор: lv151 3.5.2012, 11:01
Приведённый пример не работает.
Incorrect syntax near '<'.

Отредактировал условие.
Код

SELECT * from Table1 t1
WHERE
CASE WHEN @q = 1 THEN (t1.a1 <> 0  AND t1.a1 <> 2) 
         WHEN @q = 2 THEN (t1.a2 <> 0 AND t1.a2 <> 2) 
END

Автор: Zloxa 3.5.2012, 12:16
Цитата(Akina @  3.5.2012,  11:35 Найти цитируемый пост)
Но секция Then при этом должна возвращать логическое True или False.

MS разве так умеет? smile

Добавлено через 1 минуту и 10 секунд
Цитата(lv151 @  3.5.2012,  11:26 Найти цитируемый пост)
или лучше сделать похожее c помощью AND, OR?

Из двух плохих вариантов рекомендую выбрать тот, который реализуем  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)