[英]How do I create a conditional WHERE clause?
我需要一个有条件的 where 子句,它可以这样运行:
Select *
From Table
If (@booleanResult)
Begin
Where Column1 = 'value1'
End
Else
Begin
Where column1 = 'value1' and column2 = 'value2'
End
任何帮助,将不胜感激。
你能做到以下几点吗?
SELECT
*
FROM
Table
WHERE
(@booleanResult = 1
AND Column1 = 'value1')
OR
(@booleanResult = 0
AND Column1 = 'value1'
AND Column2 = 'value2')
您可以在WHERE
子句中轻松地对条件进行分组:
WHERE
(@BooleanResult=1 AND Column1 = 'value1')
OR
(@BooleanResult=0 AND Column1 = 'value1' AND column2 = 'value2')
根据相关脚本,无论变量@booleanResult
是设置为true 还是false,您似乎都需要Column1
的条件。 因此,我已将该条件添加到WHERE
子句中,并在其余条件中检查变量是设置为1 ( true ) 还是设置为0 ( false ) 然后它还将检查Column2
上的条件。
这只是实现这一目标的另一种方式。
CREATE TABLE MyTable
(
Column1 VARCHAR(20) NOT NULL
, Column2 VARCHAR(20) NOT NULL
);
INSERT INTO MyTable (Column1, Column2) VALUES
('value1', ''),
('', 'value2'),
('value1', 'value2');
DECLARE @booleanResult BIT
SET @booleanResult = 1
SELECT *
FROM MyTable
WHERE Column1 = 'value1'
AND ( @booleanResult = 1
OR (@booleanResult = 0 AND Column2 = 'value2')
);
输出:
COLUMN1 COLUMN2
------- -------
value1
value1 value2
DECLARE @booleanResult BIT
SET @booleanResult = 0
SELECT *
FROM MyTable
WHERE Column1 = 'value1'
AND ( @booleanResult = 1
OR (@booleanResult = 0 AND Column2 = 'value2')
);
输出:
COLUMN1 COLUMN2
------- -------
value1 value2
提供更简短的答案:
Select *
From Table
Where Column1 = 'value1' and
coalesce(column2, '') = (case when @BooleanResults = 0
then 'value1'
else coalesce( column2, '')
end)
查询 1:如果 @CompanyID 设置为 -1,则选择所有记录
查询 2:如果 @CompanyID 设置为 10 或 11 或 12,则仅选择 companyid=@CompanyID 的那些记录
Declare @CompanyID int
Set @CompanyID = -1
select * from sales
where 1=IIF(@CompanyID =-1, 1, IIF(CompanyID =@CompanyID,1,0))
Set @CompanyID = 10
select * from sales
where 1=IIF(@CompanyID =-1, 1, IIF(CompanyID =@CompanyID,1,0))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.