2012-04-09 67 views
3

我正在尝试编写where子句,它将查找满足三个条件中至少两个条件的人。 这是一个例子Where子句返回至少满足三个条件中的两个的值

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

所以它应该返回的人谁住在得克萨斯州和奥斯汀或住在得克萨斯州,是男性等,但不会有人谁只是住在得克萨斯州,他们必须满足至少两个的标准

我真正的查询可以有更多的标准,还包括一个大于两个或正好两个,等等。

在此先感谢

回答

4

您可加入比赛在一系列的情况下......然后1个否则为0结束报表和最终结果进行比较需要的匹配数量:

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 

或者,你可能会把它分成一个所有工会的名单:

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 
+0

这两个都会工作,感谢您的帮助。对此,我真的非常感激。 – user973671 2012-04-09 21:58:36

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