SQL 使用变量来控制 WHERE 中所需的语句

SQL using variable to control required statements in WHERE

我有一个 table 来自以下代码。

SELECT *
FROM df_dbo.VO_Sales
WHERE SaleMethods  not like '%Flash%'
AND (MO_Detail not like 'Month_Adjustment%' OR MO_Detail ='Month_Adjustment_Regulation')

如果我想要一个变量供用户控制是否需要WHERE语句中的第二条语句,我该如何做?

declare @control varchar(3)
set @control= 'Net'

SELECT *
FROM df_dbo.VO_Sales
WHERE SaleMethods  not like '%Flash%'
IF @control= 'Net':
    AND (MO_Detail not like 'Month_Adjustment%' OR MO_Detail ='Month_Adjustment_Regulation')
Else:
    --No additional statements

如果我没理解错的话,你会用or:

WHERE SaleMethods  not like '%Flash%' AND
       (@flag = 'NO_EVALUATE' OR
        MO_Detail not like 'Month_Adjustment%' OR
        MO_Detail = 'Month_Adjustment_Regulation'
       )

当然,值可以是任何值。我只是用 'NO_EVALUATE' 来表达意图。

使用布尔逻辑:

WHERE 
    SaleMethods not like '%Flash%'
    AND (
        @control <> 'Net' 
        OR (MO_Detail not like 'Month_Adjustment%' OR MO_Detail ='Month_Adjustment_Regulation')
    )

如果你想实现一个“else”逻辑,你可以这样做:

WHERE 
    SaleMethods not like '%Flash%'
    AND (
        (
            @control= 'Net' 
            AND (MO_Detail not like 'Month_Adjustment%' OR MO_Detail ='Month_Adjustment_Regulation')
        )
        OR (@control <> 'Net' AND ...) --> here
    )