如果条件满足,则在where子句中添加比较参数

时间:2018-07-25 11:37:36

标签: sql where-clause rdbms

仅当我的输入参数不为null时,我才想在where子句中添加比较参数。我尝试下面的查询,但它给我错误。

CASE 
     WHEN ( 
           (SELECT TOP 1 (AMOUNT + ISNULL((@p_iAmountRequested * FEEPERCENTAGE), 0.0)) 
            FROM CONVEYANCERLEGALFEE VF1 
            WHERE VF1.CONVEYANCERLEGALFEESET = MP.CONVEYANCERLEGALFEESET 
            AND VF1.LOCATION = @p_iLocation 
            AND VF1.TYPEOFAPPLICATION =@p_iTypeOfApplication
            AND VF1.MAXIMUMVALUE >= @p_iAmountRequested
            --buyer type condition is not working                  
            AND 
                case when (@p_iTypeOfBuyer is not null) THEN
                           (VF1.TYPEOFBUYER = @p_iTypeOfBuyer)
                END
            AND CONVEYANCERLEGALFEESETSTRTDATE = 
                              (SELECT MAX(CONVEYANCERLEGALFEESETSTRTDATE) 
                                  FROM CONVEYANCERLEGALFEE VF2 
                                  WHERE VF1.CONVEYANCERLEGALFEESET = VF2.CONVEYANCERLEGALFEESET 
                                  AND VF1.LOCATION = VF2.LOCATION
                                  --AND VF1.TYPEOFBUYER = vf2.TYPEOFBUYER 
                                  AND VF1.TYPEOFAPPLICATION = VF2.TYPEOFAPPLICATION 
                                  AND VF1.MAXIMUMVALUE = VF2.MAXIMUMVALUE) 
                               ORDER BY VF1.MAXIMUMVALUE ASC ) = 0.0) 
                          THEN 1
                        ELSE 0 
                    END

1 个答案:

答案 0 :(得分:0)

您可以使用CASE来代替使用COALESCE语句来实现这种目的。您没有使用正在使用的RDBM标记问题,尽管几乎所有数据库都支持它。

操作方式:

...
AND yourFieldToTest = coalesce(@yourParameter, yourFieldToTest)
...

COALESCE将返回第一个非null参数,因此,如果@yourParameter为null,则条件将为yourFieldToTest = yourFieldToTest,这与没有任何条件一样是正确的。

旁注COALESCE可以接收具有相同规则的多个参数,它将返回第一个非空值,例如coalesce(@param1, @param2, @param3, whateverColumn, etc)

在您的查询中:

AND VF1.TYPEOFBUYER = coalesce(@p_iTypeOfBuyer, VF1.TYPEOFBUYER)