SQL语句中的WHERE子句陈述
问题描述:
我有一个包含Id,Name和Active列的表'Route'。如果Id = 0,我想选择其中Active = true的所有Id。SQL语句中的WHERE子句陈述
如果Id> 0我想选择特定Id的数据,其中Active = true。
我试着用下面的查询。但不工作。 (在这里我通过了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
附加样本数据。
答
无需使用情况下,可以只使用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
一个。如果@ID> 0,那么Id = @ID AND Active = 1
b。其他活动= 1
如果你看看这两种情况下密切合作,主动= 1保持在两种情况下相同的,因此它可以被安全地送到外部条件的
那么剩下的部分是,如果@ID> 0那么Id = @ID即当参数有效值时按照参数值选择行,否则选择全部。
所以,如果你把它都成为
WHERE Active=1 AND (Id = @Id OR @Id = 0);
我试过了。但失败 – Tom 2014-11-05 09:50:12
是'活跃'一个字符串字段(''True'')还是一个整数字段('1')? – 2014-11-05 09:57:42
Active是一个Boolian字段 – Tom 2014-11-05 10:01:03