帮助SQL Server查询条件

问题描述:

我有以下查询。但它给了我在in条款中的错误。帮助SQL Server查询条件

declare @lastName varchar(20) 
set @lastName = 'Davis' 

select * 
from Table1 
where Date >= '2013-01-09' 
and lastname in( 
    case 
    when @lastName = 'DAvis' THEN @lastName 
    else 'Brown','Hudson' end) 

事情是这样的:

select * 
from Table1 
where 
    Date >= '2013-01-09' and 
    (
     (@lastName = 'Davis' and lastname = @lastName) or 
     (@lastName <> 'Davis' and lastname in ('Brown','Hudson')) 
    ) 
+0

你需要“(”和“)”围绕在争论中,不是吗? – ExCodeCowboy 2011-06-10 04:42:06

+0

@亲爱的 - 修正。谢谢。 – 2011-06-10 04:43:50

+0

谢谢亚历克斯。你帮我解决了这个问题。我接受了你的回答。 – Fayde 2011-06-10 04:57:29

如果要通过三个名字,使用的过滤结果下面的查询:

declare @lastName varchar(20) 
set @lastName = 'Davis' 

select * from Table1 

where Date >= '2013-01-09' 
and lastname in(
     'DAvis' ,'Brown','Hudson') 

有趣。我认为在这种情况下,特别是导致问题的是“布朗”,“哈德森”。你可能最好不要使用case语句。

问题是我不知道在单个情况下返回多个值的方法,所以你必须像Alex说的那样使用简单的布尔逻辑。但是,您可以在where子句中使用case语句,而不是在单个案例中返回多个值。

+0

同意。谢谢。 – Fayde 2011-06-10 04:56:02