如何添加/删除"和"来自Where子句的条件基于输入参数?
If InpParm = "A" then
Select * from Table1
Where Field1 = "AAA"
And Field2 = "BBB"
And Field3 = "CCC"
If InpParm = "B" then
Select * from Table1
Where Field1 = "AAA"
And Field3 = "CCC"
可以通过案例陈述来完成。
答案 0 :(得分:0)
您可以使用一系列逻辑运算符创建相同的行为:
SELECT *
FROM table1
WHERE (inpparm = 'A' AND field1 = 'AAA' AND field2 = 'BBB' AND field3 = 'CCC') OR
(inpparm = 'B' AND field1 = 'AAA' AND field3 = 'CCC')
请注意,由于field1
和field3
上的条件相同,因此可以在or
之外提取它们:
SELECT *
FROM table1
WHERE field1 = 'AAA' AND
field3 = 'CCC' AND
((inpparm = 'A' AND field2 = 'BBB') OR (inpparm = 'B'))
答案 1 :(得分:0)
SELECT *
FROM
Table1
WHERE
Field1 = 'AAA'
AND Field3 = 'CCC'
AND ((InpParm = 'A' AND Filed2 = 'BBB') or InpParm = 'B')
Mureinik就你的标准如何合并而言是有钱的,但有一个相当大的问题是最后一行标准需要在括号中,因为AND
具有更高的优先级而不是OR
。因此,如果没有在括号中包含最后一个语句,语句将一起评估AND的所有条件,然后简单地说OR InpParm = 'B'
这意味着你可以得到Field1/2/3
以外的结果。< / p>
您还可以注意,如果InpParam
只能包含'A'
或'B'
的值,那么您实际上也不需要InpParm = 'A'
,但为了更好的衡量标准,我有添加它。
只是因为你特别询问是否可以在案例表达中完成答案是是的,你可以在案例表达中做任何你想做的事情,这对于这个特殊情况不是必需的
SELECT *
FROM
Table1
WHERE
(CASE
WHEN InpParm = 'A' AND Field1 = 'AAA' AND Field2 = 'BBB' AND Field3 = 'CCC' THEN 1
WHEN InpParm = 'B' AND Field1 = 'AAA' AND Field2 = 'CCC' THEN 1
ELSE 0
END) = 1