1

我有以下查询:

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

这将返回过去 30 天内看到的所有产品。

我的问题是,我希望该p.LastSeen > GETDATE() - 30条款仅适用于 when @IsStocked = true

这是一个更大查询的一部分,我想在不使用 IF/ELSE 语句的情况下实现这一点(即,如果WHERE 子句@IsStocked = falsep.LastSeen > GETDATE() - 30部分被完全忽略)。

谢谢!

4

3 回答 3

4
DECLARE @IsStocked bit;

SELECT * 
FROM Products p
WHERE (@IsStocked = 1 AND p.LastSeen > GETDATE() - 30) 
OR     @IsStocked = 0;
于 2009-09-20T10:20:24.807 回答
4
DECLARE @IsStocked bit

SELECT * FROM Products p
WHERE  @IsStocked = 0 OR (p.LastSeen > GETDATE() - 30);
于 2009-09-20T10:22:24.757 回答
1

根据您的问题,这是我的查询

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

希望这会有所帮助。

于 2009-09-20T10:49:47.897 回答