[英]Case statement inside IN statement
我在查询中使用了可变年龄,如下所示:
Declare @age as int 11
Select * from people p where p.age = @age
但是当我在@age上输入0时,我想显示10到13岁之间的所有人,因此我正在尝试执行以下操作:
Select *
from people p
where p.age in( case
when @age = 0
then 10, 11, 12, 13
else @age
end
)
有人可以给我点灯吗?
您不需要CASE
语句,只需稍微切换一下WHERE
子句即可。 这应该返回相同的结果:
Select *
from people p
where
(
@age = 0
AND p.age IN (10, 11, 12, 13)
)
OR
(
@age != 0
AND p.age = @age
)
您不需要案例说明:
SELECT col1, col2, ..., coln
FROM people AS p
WHERE (@age = 0 AND p.age BETWEEN 10 AND 13)
OR (@age <> 0 AND p.age = @age)
这似乎最简单
如果业务规则发生更改,也很容易进行修改。
declare @min int
declare @max int
declare @age int
set @age = 0
if (@age = 0)
begin
SET @min = 10
SET @max = 13
end
else
begin
SET @min = @age
SET @max = @age
end
Select *
from people p
where age >= @min and age <= @max
select *
from people
where (age between 10 and 13 and @age=0)
or (age = @age)
您需要将SELECT添加到IN()部分
Select *
from people p
where p.age in (SELECT case
when @age = 0
then 10, 11, 12, 13
else @age
end
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.