use*_*671 5 sql where-clause sql-server-2008
我正在尝试编写一个 where 子句,以查找满足三个条件中至少两个条件的人。这是一个例子
SELECT *
FROM Personal
WHERE
[State] = 'Tx' or [City] = 'Austin' or [Gender] = 'Male'
Run Code Online (Sandbox Code Playgroud)
所以它应该返回住在德克萨斯州和奥斯汀的任何人或住在德克萨斯州并且是男性等等,但不是只住在德克萨斯州的人,他们必须至少满足两个标准
我的真实查询可以有更多条件,并且还包括大于两个或正好两个等等。
提前致谢
您可以在一系列 case ... then 1 else 0 end statements 中添加匹配项,并将最终结果与所需匹配项的数量进行比较:
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
Run Code Online (Sandbox Code Playgroud)
或者,您可以将其分解为 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1816 次 |
| 最近记录: |