如何在SQL select Query中使用case语句

Aru*_*K V 3 sql sql-server select case sql-server-2008

我需要根据特定条件获取所选查询的输出

意味着if(id=uid) 我需要以下查询

select * from table1 where id=5;
Run Code Online (Sandbox Code Playgroud)

否则我需要下面的一个

select * from table1 where id=10
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用if条件.但是我的查询很长,所以当我使用if else时它看起来就像

if(@id=@uid)
begin
select * from table1 where id=5;// query 1
end
else
select * from table1 where id=10;//query 2
Run Code Online (Sandbox Code Playgroud)

但在这里我需要再次替换整个查询进行单次检查.我希望我可以这样做:

declare @id int=4;
declare @uid=10;

select * from table1 where 
case 
when @id=@uid
then 
id=5
else
id=10;
end
Run Code Online (Sandbox Code Playgroud)

更新用

我还需要一个条件

在这种情况下,id = 5,uid = 10

then if(id=uid)
Run Code Online (Sandbox Code Playgroud)

然后

select * from table1 where id=5
Run Code Online (Sandbox Code Playgroud)

if(id!=uid)
Run Code Online (Sandbox Code Playgroud)

然后

select * from table1
Run Code Online (Sandbox Code Playgroud)

这样的事情

Mur*_*nik 7

您可以使用case表达式返回的值id应该等于:

SELECT *
FROM   table1 
WHERE  id = CASE WHEN @id = @uid THEN 5 ELSE 10 END;
Run Code Online (Sandbox Code Playgroud)

编辑:

问题中更新的要求是在返回所有行时@id != @uid.这可以通过比较id来完成id:

SELECT *
FROM   table1 
WHERE  id = CASE WHEN @id = @uid THEN 5 ELSE id END;
Run Code Online (Sandbox Code Playgroud)

或者,使用此更新的要求,or可以更简单地使用简单表达式:

SELECT *
FROM   table1 
WHERE  @id = @uid OR id = 5;
Run Code Online (Sandbox Code Playgroud)