根据案例条件{where}添加不同条件到where子句

时间:2017-12-29 08:53:44

标签: sql sql-server

如果列A不为空,我应该添加一个条件,如果它是空的,那么我应该添加另一个条件。像这样:

select *
from table t
where case when len(t.A) > 0 then t.A = (select B from anothertable ) 
      else t.C = (select D from anothertable)

由于这不能编译,我无法在IF中使用WHERE子句,还有其他方法可以实现这一目标吗?

1 个答案:

答案 0 :(得分:5)

我们可以在WHERE子句中重新登录以使其正常工作:

SELECT *
FROM table_t
WHERE
    (LEN(t.A) > 0   AND t.A IN (SELECT B FROM anothertable) ) OR
    (LEN(t.A) <= 0) AND t.C IN (SELECT D FROM anothertable) );

如果anothertable上的子查询返回多条记录,要解决@HoneyBadger的注释,如果我们使用t.A = (subquery),则此查询会出错。如果您打算使用equals,那么您必须确保子查询仅返回单个记录。您使用WHERE IN的建议可能会解决问题。