1

次のクエリがあります。

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

これにより、過去 30 日間に表示されたすべての製品が返されます。

私の質問は、p.LastSeen > GETDATE() - 30条項が@IsStocked = true.

これはより大きなクエリの一部であり、IF/ELSE ステートメントを使用せずにこれを実現したいと考えています (つまり、WHERE 句@IsStocked = falseのセクションが完全に無視される場合)。p.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 に答える