【问题标题】:Where clause that returns values that have meet at least two of three criteriaWhere 子句返回满足三个条件中至少两个的值
【发布时间】:2012-04-22 05:15:09
【问题描述】:

我正在尝试编写一个 where 子句来查找满足三个条件中至少两个的人。 这是一个例子

   SELECT *
   FROM Personal
   WHERE
   [State] = 'Tx' or [City] = 'Austin' or [Gender] = 'Male'

所以它应该返回居住在德克萨斯州和奥斯汀或居住在德克萨斯州并且是男性的任何人等等,但不是仅仅住在德克萨斯州的人,他们必须满足至少两个标准

我的真实查询可以有更多的条件,也可以包括大于 2 或正好 2 等等。

提前致谢

【问题讨论】:

    标签: sql sql-server-2008 where-clause


    【解决方案1】:

    您可以在一系列 case 中添加匹配项...然后 1 else 0 end 语句并将最终结果与所需匹配项的数量进行比较:

       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 
    

    【讨论】:

    • 这两种方法都可以,感谢您的帮助。我真的很感激。
    【解决方案2】:
     SELECT *
       FROM Personal
       WHERE
       ([State] = 'Tx' AND [City] = 'Austin') or ([State] = 'Tx' AND [Gender] = 'Male')
    

    【讨论】:

      猜你喜欢
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      相关资源
      最近更新 更多