簡體   English   中英

IN語句中的案例語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM