如果至少满足一个条件,则在查询中排除唯一ID

时间:2018-04-20 15:27:01

标签: mysql sql reporting-services

我遇到了这个问题,我不确定如何解决。

在这种情况下:我想获得一份尚未完成调查的所有个人的清单。但是,有人可以开始/完成多项调查。

因此,我想要一份尚未完成至少一项调查的个人名单。

这是我的查询看起来喜欢获得不完整调查的人员列表:

SELECT Survey.UserID, Survey.Fullname

FROM [...]

WHERE Survey.SurveySubmitted = 0    -- 0 = Unsubmitted, 1 = submitted

现在这就是数据库的样子

UserID            Fullname              SurveySubmitted
1                 John Smith            0
2                 Jane Doe              1
3                 Tom Glass             0
3                 Tom Glass             1

现在上面的查询将选择John Smith和Tom Glass。但是,由于汤姆玻璃已经完成了至少一项调查,他应该被排除在外。

有什么想法要继续吗?它很可能需要在另一个SELECT中使用SELECT,但我无法想象它。

2 个答案:

答案 0 :(得分:1)

您可以检查用户中没有提交/已完成

的用户
select Survey.UserID, Survey.Fullname 
from [.....]
where UserID NOT IN (
  SELECT Survey.UserID, Survey.Fullname
    FROM [...]
    WHERE Survey.SurveySubmitted = 1
)

答案 1 :(得分:0)

您应该按照唯一标识用户/调查组合的方式进行分组,然后对已提交的调查数量进行求和。然后,您可以使用having子句过滤掉行> 0:

select *
from Survey 
group by UserId, FullName
having sum(SurveySubmitted) = 0;

SQLFiddle Example