Могу ли я использовать If / Else или Case в середине предложения where? - PullRequest
2 голосов
/ 16 февраля 2012

Я какое-то время работал над этой проблемой, но я подумал, что должен быть более простой способ сделать это, поэтому я решил сделать пост.

У меня есть параметр фильтра данных, и я хочу сделать ветку if / else или case в моем предложении where. Если моя переменная @State отличается от «All», я хочу добавить «And (state = @State)» в мое предложение where.

SELECT     timestamp, service, state
FROM         socketLog
WHERE     (timestamp BETWEEN dbo.fxMilitaryTime('02/01/12', 'mdy') 
    AND DATEADD(dd, 1, getdate())) AND (state = @State)
ORDER BY service

Я попытался получить оператор if / else и case для работы там, где у меня были проблемы с синтаксисом. Я почти уверен в этом случае и если операторы поддерживаются в предложении where, но я не могу заставить его работать правильно.

Спасибо тем, у кого есть время помочь.

Ответы [ 3 ]

3 голосов
/ 16 февраля 2012

Не могли бы вы просто изменить последний бит на:

AND (@State = 'All' OR @State = state)

Разве я не неправильно понимаю?!

1 голос
/ 16 февраля 2012

Победителем является я.

Declare @State varchar(20)
set @State = 'All'
SELECT     timestamp, service, state
FROM         socketLog
WHERE     (timestamp BETWEEN dbo.fxMilitaryTime('02/01/12', 'mdy') AND DATEADD(dd, 1, getdate()))
and (State = @State OR (@State = 'All'))
ORDER BY service
go
1 голос
/ 16 февраля 2012

Предложение WHERE, приведенное ниже, будет игнорироваться, если @ State = 'All', или использовать его в качестве фильтра, если задано что-либо еще.

WHERE ('All' = @State or state = @State) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...