我遇到了这个问题,我不确定如何解决。
在这种情况下:我想获得一份尚未完成调查的所有个人的清单。但是,有人可以开始/完成多项调查。
因此,我想要一份尚未完成至少一项调查的个人名单。
这是我的查询看起来喜欢获得不完整调查的人员列表:
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,但我无法想象它。
答案 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;