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
)
我有一个 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
)