SQL Server 2008 - запрос на изменение логической переменной - PullRequest
1 голос
/ 20 сентября 2009

У меня следующий запрос:

DECLARE @IsStocked bit
SELECT * FROM Products p WHERE p.LastSeen >  GETDATE() - 30 

Возвращает все Продукты , которые были просмотрены в течение последних 30 дней.

У меня такой вопрос, я бы хотел, чтобы предложение p.LastSeen > GETDATE() - 30 применялось только тогда, когда @IsStocked = true.

Это часть более крупного запроса, и я хотел бы достичь этого без использования операторов IF / ELSE (т. Е. Если @IsStocked = false, то раздел p.LastSeen > GETDATE() - 30 в предложении WHERE полностью игнорируется).

Спасибо!

Ответы [ 3 ]

4 голосов
/ 20 сентября 2009
DECLARE @IsStocked bit

SELECT * FROM Products p
WHERE  @IsStocked = 0 OR (p.LastSeen > GETDATE() - 30);
4 голосов
/ 20 сентября 2009
DECLARE @IsStocked bit;

SELECT * 
FROM Products p
WHERE (@IsStocked = 1 AND p.LastSeen > GETDATE() - 30) 
OR     @IsStocked = 0;
1 голос
/ 20 сентября 2009

Вот мой запрос по вашему вопросу

DECLARE @IsStocked bit
Set @IsStocked=1
Select * from Product
Where LastSeen  = Case When (@IsStocked=1) THEN GETDATE() - 30 
                   Else LastSeen  END

надеюсь, что это поможет.

...