Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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 过滤器只得到一个条件_Sql_Tsql - Fatal编程技术网

Sql 过滤器只得到一个条件

Sql 过滤器只得到一个条件,sql,tsql,Sql,Tsql,我在WHERE子句中有一个验证,如: ... AND (@BDOnly = 0 OR [DT].[Abbreviation] = @IsBDChecked) AND (@CDOnly = 0 OR [DT].[Abbreviation

我在WHERE子句中有一个验证,如:

                         ...
                         AND (@BDOnly = 0
                             OR [DT].[Abbreviation] = @IsBDChecked)
                         AND (@CDOnly = 0
                             OR [DT].[Abbreviation] = @IsCDChecked)
                         AND (@PPOOnly = 0
                             OR [DT].[Abbreviation] = @IsPPOChecked)
                         AND (@FBOMOnly = 0
                             OR [DT].[Abbreviation] = @IsFBOMChecked)
                         AND (@APOnly = 0
                             OR [DT].[Abbreviation] = @IsAPChecked)
                         AND (@COOnly = 0
                             OR [DT].[Abbreviation] = @IsCOChecked)
因此,每个AND子句检查布尔值是否为位值
0
1
,如果是
0
,只需执行任何操作,但如果是
1
,则执行过滤器。我的问题是 如果我发送两个值为
1
,我的意思是

@BDOnly=1
@CDOnly=1
它只过滤其中一个,而得到两个过滤器,我的意思是:

[DT].[Abbreviation] = @IsBDChecked


我做错了什么?关于

我在这里猜测一下,因为没有足够的数据。如果要仅在设置了
@BDOnly
时返回一行
缩写
匹配的
@IsBDChecked
,并且在设置了
@CDOnly
时返回另一行
缩写匹配的
@IsCDChecked
,请尝试以下操作:

                        (@BDOnly = 1
                         AND [DT].[Abbreviation] = @IsBDChecked)
                     OR (@CDOnly = 1
                         AND [DT].[Abbreviation] = @IsCDChecked)
                     OR (@PPOOnly = 1
                         AND [DT].[Abbreviation] = @IsPPOChecked)
                     OR (@FBOMOnly = 1
                         AND [DT].[Abbreviation] = @IsFBOMChecked)
                     OR (@APOnly = 1
                         AND [DT].[Abbreviation] = @IsAPChecked)
                     OR (@COOnly = 1
                         AND [DT].[Abbreviation] = @IsCOChecked)
小型代表性案例:

DECLARE @ADOnly BIT = 0
      , @BDOnly BIT = 1
      , @CDOnly BIT = 1
      , @IsADChecked NVARCHAR(100) = 'A'
      , @IsCDChecked NVARCHAR(100) = 'C'
      , @IsBDChecked NVARCHAR(100) = 'B'



;WITH myTable AS 
(
    SELECT * FROM (VALUES ('A'), ('B'), ('C')) X(Abbreviation)
)
SELECT *
  FROM myTable
 WHERE (@ADOnly = 1 AND Abbreviation = @IsADChecked)
    OR (@BDOnly = 1 AND Abbreviation = @IsBDChecked)
    OR (@CDOnly = 1 AND Abbreviation = @IsCDChecked)
收益率:

Abbreviation
------------
B
C

您认为未正确筛选的记录的
@IsBDChecked
@IsCDChecked
缩写
的值是多少?您会找到您需要的内容。它只是一个字符串,我想问题在于它只筛选了其中一个,我希望得到的结果是按字符串1过滤和按字符串2过滤,因此结果应该包含两个字符串值的组合@MarcinJNo。如果它只是一个字符串,那么字符串(缩写)不能等于两个不同的字符串(两个变量)。这就是为什么你必须让我们知道这些价值观是什么,或者可能是什么,否则我们将无法帮助你。
Abbreviation
------------
B
C