SQL满足条件时选择查询

时间:2018-04-09 19:55:54

标签: sql sql-server select

Site Owner |  Site URL    | Delete Site
 User #1   | google.com   |   Yes
 User #2   | google.com   |   Yes
 User #3   | yahoo.com    |   No
 User #4   | yahoo.com    |   Yes
 User #5   | hotmail.com  |   No
 User #6   | hotmail.com  |   NULL

我需要选择所有网站所有者都回答是的所有网站网址。如果同一站点URL中的一个用户回答“是”而另一个用户回答“否”,则表示我不需要。例如,我在上面的示例中需要获取google.com,因此两个用户都回答“是”。

3 个答案:

答案 0 :(得分:1)

您可以使用group byhaving

select site_url
from t
group by site_url
having min(delete_site) = 'yes' and max(delete_site) = 'yes' and
       count(*) = count(delete_site);  -- no NULL values;

您实际上可以将having子句简化为:

having count(*) = sum(case when delete_site = 'yes' then 1 else 0 end)

答案 1 :(得分:1)

这是另一个版本。 对于空值,我更喜欢使用ISNULL替换器,而IIF用于解码是否为可数数字

SELECT 
  [Site Url]
FROM
 Table1
GROUP BY
 [Site Url]
HAVING 
  SUM( IIF(ISNULL([Delete Site], '')='Yes', 0, 1)) = 0

答案 2 :(得分:0)

以同样的方式,你也可以使用not exists

select * 
from table t 
where not exists (
    select 1 from table
    where [Site URL] = t.[Site URL]  and [Delete Site] <> 'Yes'
)