Как создать условное предложение WHERE?

Мне нужно иметь условие conditional where, которое работает так:

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

Любая помощь будет оценена по достоинству.

Ответы

Ответ 1

Не могли бы вы сделать следующее?

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

Ответ 2

Вы можете легко группировать условия в предложении WHERE:

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

Ответ 3

На основе script, похоже, вам нужно условие для Column1 независимо от того, установлена ​​ли переменная @booleanResult в true или false. Итак, я добавил это условие в предложение WHERE, а в оставшемся состоянии проверяет, установлена ​​ли переменная 1 (true) или если она установлена ​​на 0 (false), то он также проверяет условие на Column2.

Это еще один способ добиться этого.

Создайте и вставьте script:

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

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

Script, когда для битовой переменной установлено значение 1 (true):

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

Script, когда для битовой переменной установлено значение 0 (false):

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 Fiddle.

Ответ 4

Чтобы предоставить более короткий ответ:

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