25

次のように動作する条件付き where 句が必要です。

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

どんな助けでも大歓迎です。

4

4 に答える 4

42

次のことをしていただけませんか?

SELECT
    *
FROM
    Table
WHERE
    (@booleanResult = 1
    AND Column1 = 'value1')
OR
    (@booleanResult = 0
    AND Column1 = 'value1'
    AND Column2 = 'value2')
于 2012-05-09T18:10:24.567 に答える
14

WHERE句で条件を簡単にグループ化できます。

WHERE
   (@BooleanResult=1 AND Column1 = 'value1')
OR
   (@BooleanResult=0 AND Column1 = 'value1' AND column2 = 'value2')
于 2012-05-09T18:10:59.520 に答える
6

問題のスクリプトに基づくとColumn1、変数@booleanResultがtrueまたはfalseに設定されているかどうかに関係なく、の条件が必要なようです。したがって、その条件を句に追加しWHERE、残りの条件で変数が1true)に設定されているかどうか、または0false)に設定されている場合は、の条件もチェックしColumn2ます。

これは、これを達成するためのもう1つの方法です。

スクリプトを作成して挿入します。

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

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

ビット変数が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

ビット変数が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でデモを表示するには、ここをクリックしてください。

于 2012-05-09T18:27:20.473 に答える
1

より短い答えを提供するには:

Select *
From Table
Where Column1 = 'value1' and
      coalesce(column2, '') = (case when @BooleanResults = 0 
                                    then 'value1' 
                                    else coalesce( column2, '')
                               end)
于 2012-05-09T18:17:06.893 に答える