SQL WHERE子句 - 条件过滤器

时间:2015-11-18 20:40:47

标签: sql-server tsql where

我有一个查询我想使用以下逻辑(完全了解它不会像写的那样工作):

select *
From orders
Where   if Value1 != 'TEST'
        (Value1 = @1)
        Else if Value2 != 'TEST'
        (Value2 = @2)
        Else 1=2

我认为我不能使用Case...Wheniif,因为该值会根据条件的结果过滤查询。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您的逻辑等同于:

Select *
From orders
Where (Value1 <> 'TEST' and Value1 = @1) OR
      (Value1 = 'TEST' and Value2 <> 'TEST' and Value2 = @2)

这不是100%相同。如果Value1可以是NULL,则逻辑应考虑到这一点:

Select o.*
From orders o
Where (Value1 <> 'TEST' and Value1 = @1) OR
      (COALESCE(Value1, 'TEST') = 'Test' and Value2 <> 'TEST' and Value2 = @2)