Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 2008_Where Clause - Fatal编程技术网

Sql 返回至少满足三个条件中两个条件的值的Where子句

Sql 返回至少满足三个条件中两个条件的值的Where子句,sql,sql-server-2008,where-clause,Sql,Sql Server 2008,Where Clause,我正试图写一个where子句,它将找到满足三个标准中至少两个标准的人。 这是一个例子 SELECT * FROM Personal WHERE [State] = 'Tx' or [City] = 'Austin' or [Gender] = 'Male' 因此,它应该返回居住在德克萨斯州和奥斯汀,或居住在德克萨斯州且为男性等的任何人,但不包括仅居住在德克萨斯州的人,他们必须满足至少两个标准 我的真实查询可以有更多的条件,也可以包含大于2或正好2的条件,以此类推 提前感

我正试图写一个where子句,它将找到满足三个标准中至少两个标准的人。 这是一个例子

   SELECT *
   FROM Personal
   WHERE
   [State] = 'Tx' or [City] = 'Austin' or [Gender] = 'Male'
因此,它应该返回居住在德克萨斯州和奥斯汀,或居住在德克萨斯州且为男性等的任何人,但不包括仅居住在德克萨斯州的人,他们必须满足至少两个标准

我的真实查询可以有更多的条件,也可以包含大于2或正好2的条件,以此类推


提前感谢

您可以在一系列案例中添加匹配项。。。然后1或0结束语句,并将最终结果与所需匹配数进行比较:

 SELECT *
   FROM Personal
   WHERE
   ([State] = 'Tx' AND [City] = 'Austin') or ([State] = 'Tx' AND [Gender] = 'Male')
   SELECT *
   FROM Personal
   WHERE
     case when [State] = 'Tx' then 1 else 0 end
     + case when [City] = 'Austin' then 1 else 0 end
     + case when [Gender] = 'Male' then 1 else 0 end
     >= 2
或者,您可以将其拆分为一个union all列表:

SELECT *
FROM   personal
       INNER JOIN (SELECT id
                   FROM   (SELECT id
                           FROM   personal
                           WHERE  state = 'Tx'
                           UNION ALL
                           SELECT id
                           FROM   personal
                           WHERE  city = 'Austin'
                           UNION ALL
                           SELECT id
                           FROM   personal
                           WHERE  gender = 'Male') a
                   GROUP  BY id
                   HAVING COUNT (*) >= 2) a
         ON personal.id = a.id 

这两个都可以,谢谢你的帮助。我真的很感激。