检查每个用户的行列表中的值

b4lqfgs4  于 2022-10-03  发布在  其他
关注(0)|答案(2)|浏览(135)

我目前正在处理一系列调查数据:
UserID|用户名|SurveyID|QuestionID|ResponseID|isSkipers
-|
1|测试1|100|10|1|0
1|测试1|100|20|2|0
2|测试2|101|10|3|0
2|测试2|101|20|4|1
3|测试3|102|10|5|1
3|测试3|102|20|6|1

我正在寻找一个查询来给我用户、SurveyID和一个标志(0=完成/1=未完成),告诉我他们是否完成了所有问题(所有isSkibled值都是0)……所以结局应该是..。

UserID|用户名|SurveyID|完整
-|-|
1|测试1|100|0
2|测试2|101|1
3|测试3|102|1

有谁能帮帮我吗?我尝试使用GROUP BYSUM/COUNT等,但每个用户总是得到多行。我肯定我错过了一些简单的东西。

mutmk8jj

mutmk8jj1#

大概,对于您所需的结果,您需要:

select UserId, User_Name, SurveyId, 
  case when sum(isSkipped) > 0 then 1 else 0 end as Complete
from t
group by UserId, User_Name, SurveyId;
jv4diomz

jv4diomz2#

因为他们完成了一个问题就足够被认为是完成了,所以您可以只为您的complete状态选择max(isSkipped)

select   UserID
        ,[User Name]
        ,SurveyID
        ,max(isSkipped) as Complete
from     t
group by UserID, [User Name], SurveyID

UserID|用户名|SurveyID|完整
-|-|
1|测试1|100|0
2|测试2|101|1
3|测试3|102|1

Fiddle

相关问题