如何在SQL select

时间:2015-04-22 10:13:04

标签: sql sql-server sql-server-2008 select case

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

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

select * from table1 where id=5;

否则 我需要以下一个

select * from table1 where id=10

我知道我可以使用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

但是在这里我需要再次替换整个查询以进行单次检查。我希望我能做到这样的事情:

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

select * from table1 where 
case 
when @id=@uid
then 
id=5
else
id=10;
end

更新

我还需要一个条件

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

then if(id=uid)

然后

select * from table1 where id=5

if(id!=uid)

然后

select * from table1

类似这样的事情

3 个答案:

答案 0 :(得分:7)

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

SELECT *
FROM   table1 
WHERE  id = CASE WHEN @id = @uid THEN 5 ELSE 10 END;

编辑:

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

SELECT *
FROM   table1 
WHERE  id = CASE WHEN @id = @uid THEN 5 ELSE id END;

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

SELECT *
FROM   table1 
WHERE  @id = @uid OR id = 5;

答案 1 :(得分:2)

SELECT 
    *
FROM
    table1
WHERE
(
    @id = @uid
    AND
    id =5
)
OR
(
    not @id = @uid
    AND
    id=10
) 

答案 2 :(得分:2)

SELECT * FROM table1
WHERE (id=5 AND @id=@uid) OR (id=10 AND @id<>@uid)