根据Input Parm添加/删除where子句条件

时间:2017-08-03 15:33:51

标签: sql select

如何添加/删除"和"来自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"  

可以通过案例陈述来完成。

2 个答案:

答案 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')

请注意,由于field1field3上的条件相同,因此可以在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