【问题标题】: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')