我有一个查询我想使用以下逻辑(完全了解它不会像写的那样工作):
select *
From orders
Where if Value1 != 'TEST'
(Value1 = @1)
Else if Value2 != 'TEST'
(Value2 = @2)
Else 1=2
我认为我不能使用Case...When
或iif
,因为该值会根据条件的结果过滤查询。有什么想法吗?
答案 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)