use*_*973 1 sql case-statement in-clause sql-server-2008
WHERE CONDITION1='ABC'
AND Status =
CASE @Option
WHEN 1 THEN 'True'
WHEN 2 THEN 'False'
WHEN 3 THEN NULL
WHEn 4 THEN **IN ('True', 'False', NULL)**
END
Run Code Online (Sandbox Code Playgroud)
如何编写查询,我的第一个选项直接匹配,=
但我的最后一个选项需要一个IN
上面的查询给出了错误,但我想要类似的东西,我无法找到.
一个CASE
语句不能返回一组值的...但这个查询应该给你同样的结果:
WHERE CONDITION1='ABC'
AND Status =
CASE
WHEN 1 THEN 'True'
WHEN 2 THEN 'False'
WHEN 3 THEN NULL
WHEN 4 THEN Status
END
Run Code Online (Sandbox Code Playgroud)
另外,请注意,除非你有ANSI_NULLS OFF
,Status
否则= NULL
......你需要使用IS NULL
这个比较,你需要CASE
完全放弃声明.
跳过CASE语句并使用OR.并且根据ANSI标准,不要与NULL进行比较:
WHERE CONDITION1='ABC'
AND ((@Option = 1 AND Status = 'True') OR
(@Option = 2 AND Status = 'False') OR
(@Option = 3 AND Status IS NULL) OR
(@Option = 4 AND (Status IS NULL OR Status IN ('True', 'False'))))
Run Code Online (Sandbox Code Playgroud)