如何创建条件WHERE子句?(How do I create a conditional WHERE

2019-07-29 08:24发布

我需要有工作作为这样一个条件where子句:

Select *
From Table
If (@booleanResult)
Begin
  Where Column1 = 'value1'
End
Else
Begin
  Where column1 = 'value1' and column2 = 'value2'
End

任何帮助,将不胜感激。

Answer 1:

你可以只执行以下操作?

SELECT
    *
FROM
    Table
WHERE
    (@booleanResult = 1
    AND Column1 = 'value1')
OR
    (@booleanResult = 0
    AND Column1 = 'value1'
    AND Column2 = 'value2')


Answer 2:

您可以将条件很容易地在WHERE子句:

WHERE
   (@BooleanResult=1 AND Column1 = 'value1')
OR
   (@BooleanResult=0 AND Column1 = 'value1' AND column2 = 'value2')


Answer 3:

基于有问题的剧本,看来你需要的条件Column1不论变量是否@booleanResult设置为true或false。 所以,我补充说,条件到WHERE子句,并在其余条件检查变量是否设置为1( ),或者如果它被设置为0( ),那么它也将检查的条件Column2

这是实现这一点的只是多一个途径。

创建和插入脚本:

CREATE TABLE MyTable
(
    Column1 VARCHAR(20) NOT NULL
  , Column2 VARCHAR(20) NOT NULL
);

INSERT INTO MyTable (Column1, Column2) VALUES
  ('value1', ''),
  ('',       'value2'),
  ('value1', 'value2');

脚本时位变量被设置为1(真):

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

脚本时位变量设置为0(假):

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

演示:

点击此处查看SQL小提琴演示。



Answer 4:

为了提供更短的答案:

Select *
From Table
Where Column1 = 'value1' and
      coalesce(column2, '') = (case when @BooleanResults = 0 
                                    then 'value1' 
                                    else coalesce( column2, '')
                               end)


文章来源: How do I create a conditional WHERE clause?