如何创建条件WHERE子句?

Yat*_*rix 21 sql sql-server-2005 where-clause

我需要有一个条件where子句,其操作如下:

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

任何帮助,将不胜感激.

dia*_*aho 36

你能做到以下几点吗?

SELECT
    *
FROM
    Table
WHERE
    (@booleanResult = 1
    AND Column1 = 'value1')
OR
    (@booleanResult = 0
    AND Column1 = 'value1'
    AND Column2 = 'value2')
Run Code Online (Sandbox Code Playgroud)


JNK*_*JNK 13

您可以在WHERE子句中轻松地对条件进行分组:

WHERE
   (@BooleanResult=1 AND Column1 = 'value1')
OR
   (@BooleanResult=0 AND Column1 = 'value1' AND column2 = 'value2')
Run Code Online (Sandbox Code Playgroud)

  • @Yatrix是的,它会.但是你永远不会匹配,因为你正在检查`@ Booleanresult`并且它不能同时是'1`和'0'. (3认同)

小智 5

根据所讨论的脚本Column1,无论变量@booleanResult设置为 true 还是 false ,您似乎都需要条件。因此,我已将该条件添加到WHERE子句中,并在其余条件中检查变量是设置为1 ( true ) 还是设置为0 ( false ) 然后它还将检查条件 on Column2

这只是实现这一目标的另一种方式。

创建并插入脚本:

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

INSERT INTO MyTable (Column1, Column2) VALUES
  ('value1', ''),
  ('',       'value2'),
  ('value1', 'value2');
Run Code Online (Sandbox Code Playgroud)

位变量设置为 1 (true) 时的脚本:

DECLARE @booleanResult BIT
SET @booleanResult = 1

SELECT      *
FROM        MyTable
WHERE       Column1 = 'value1'
AND         (        @booleanResult = 1
                OR  (@booleanResult = 0 AND Column2 = 'value2')
            );
Run Code Online (Sandbox Code Playgroud)

输出

COLUMN1 COLUMN2
------- -------
value1  
value1  value2
Run Code Online (Sandbox Code Playgroud)

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

DECLARE @booleanResult BIT
SET @booleanResult = 0

SELECT      *
FROM        MyTable
WHERE       Column1 = 'value1'
AND         (        @booleanResult = 1
                OR  (@booleanResult = 0 AND Column2 = 'value2')
            );
Run Code Online (Sandbox Code Playgroud)

输出

COLUMN1 COLUMN2
------- -------
value1  value2
Run Code Online (Sandbox Code Playgroud)

演示:

单击此处查看 SQL Fiddle 中的演示。