2011-12-16 116 views
1

我在数据库中有两列:campus1campus2,我想编写一个查询做以下情形:如果在SQL查询语句

如果campus2为null,则只有比较campus1数据,否则比较数据campus1campus2

我写了如下的查询,但得到了错误信息。

select * from tbl1 where 
case when campus2 is null then ([email protected] or campus1 is null) 
else 
    ([email protected] or campus1 is null) and ([email protected] or campus2 is null) 
end 

任何人都可以指向正确的方向吗?

+0

是没有意义比拟的 - 即使它compil ed,你`else`子句中的条件涵盖了你似乎正在检查的条件。 – 2011-12-16 15:48:05

+1

hrmm,不要以为你需要case语句。如何从tbl1中选择*(campus2为null或campus2 = @ campus2)和campus1 = @ campus1。 – Intrigue 2011-12-16 15:49:37

回答

0

你并不需要一个case语句这里只是写出来的布尔逻辑

WHERE 
(campus2 is null 
     AND 
    ([email protected] or campus1 is null)) 
OR 
(campus2 is not null 
     AND 
    ([email protected] or campus1 is null)     
    and [email protected]) 
) 

作为一个侧面说明,如果你真的想在Where子句中使用一个Case声明你通常它写在这种形式

WHERE 
     CASE WHEN condition THEN expression 
      ELSE otherExpression 
     END = @SomeParameter 

此评估几个条件到一个值来对参数