我有一个带有Id,Name和Active列的表'Route'。如果Id = 0,我想选择Active = true的所有Id。
如果Id> 0我想选择Active = true的特定Id的数据。
我尝试了以下查询。但不行。 (这里我传递了2作为Id值。) 有人可以支持我吗?
DECLARE @ID INT
SET @ID = 2
SELECT DISTINCT Id ,Name
FROM Route
WHERE
CASE WHEN @ID > 0
THEN Id = @ID AND Active= 1
ELSE
Active=1
END
附加示例数据。
答案 0 :(得分:2)
无需使用案例只能使用where子句。
DECLARE @ID INT
SET @ID = 2
SELECT DISTINCT Id ,Name
FROM Route
WHERE Active=1 AND (Id = @Id OR @Id = 0);
<强>解释强>
WHERE
CASE WHEN @ID > 0
THEN Id = @ID AND Active= 1
ELSE
Active=1
一个。 if @ID&gt; 0然后Id = @ID AND Active = 1
湾其他活动= 1
如果仔细研究这两种情况,Active = 1在两种情况下都保持相同,因此可以安全地将其置于条件之外
然后剩下的部分是,如果@ID&gt; 0然后Id = @ID,即当参数具有有效值时根据参数值选择行,否则选择全部。
所以,如果你把它们结合起来就变成了
WHERE Active=1 AND (Id = @Id OR @Id = 0);