Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何创建条件WHERE子句?_Sql_Sql Server 2005_Where Clause - Fatal编程技术网

Sql 如何创建条件WHERE子句?

Sql 如何创建条件WHERE子句?,sql,sql-server-2005,where-clause,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 任何帮助都将不胜感激 你能做一下吗 SELECT * FROM Table WHERE (@booleanResult = 1 AND

我需要有一个条件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')

要提供一个简短的答案:

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

根据所讨论的脚本,无论变量
@booleansult
设置为true还是false,似乎都需要
Column1
的条件。因此,我已将该条件添加到
WHERE
子句中,并在剩余条件中检查变量是否设置为1(true)或如果设置为0(false),则它还将检查
列2
上的条件

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

创建和插入脚本: 位变量设置为1(真)时的脚本: 输出:

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

演示:

你只是在编语法吗?这对什么是有效的RDBMS?哎呀,我留下了一些无关的字符。其余的语法是标准SQL,应该被任何接受以“@”开头的局部变量的数据库所理解。答案较短,但代码不是。然而,+1是为了避免短路,这对于更多的SQL风格很有用。这不会在我的结果中给出OR的两个方面吗?我回到这里并更改了接受的答案。回顾过去,我想要的并不是我在问题中真正表达的东西。湿婆回答了更多我想要的,但你准确地回答了我的问题。对此很抱歉-这是公平的做法。请记住,短路并不总是像SQL中所期望的那样有效。由db供应商决定如何计算表达式。谢谢@diaho,因为这帮助我现在有了一个条件,允许计算ID=1或(1,2,3,4)中的ID,这取决于用户是否将任何内容传递到存储过程:)。这不会给我结果的两个方面吗?@Yatrix是的,会的。但是你永远不会同时匹配这两个,因为你正在检查
@booleansult
,它不能同时是
1
0
。这正是我需要的。谢谢,湿婆。我只是觉得你的例子最完整,对我个人来说也是最有帮助的。全体投票,但只能有一个(被接受)!我改变了我接受的答案。你给我的正是我想要的,但公平地说,正如你所说,他们给我的正是我想要的。我只是没有问最好的问题。在这一点上,我不能确切地记得我真正想要的问题是什么
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