帮助SQL Server查询条件

时间:2011-06-10 04:35:57

标签: sql sql-server tsql where-clause

我有以下查询。但它在in子句中给出了错误。

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)

3 个答案:

答案 0 :(得分:2)

这样的事情:

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

答案 1 :(得分:0)

如果要按三个名称过滤结果,请使用以下查询:

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

select * from Table1 

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

答案 2 :(得分:0)

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

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