我的简化架构是:
Id
,Email
)Id
,Name
)TeamId
,ParticipantId
)Id
,ParticipantId
)Id
,ResponseId
,Points
,BonusPoints
)对于每个至少有2名成员的团队,我想获得TeamId,总会员数和总团队积分。团队总分数是来自所有团队成员的ResponseDetails的BonusPoints和Points的总和。请注意,参与者可以是多个团队的成员。
到目前为止,我有这个问题:
select
tm.[TeamId],
count(tm.[ParticipantId]) as 'TotalMemberCount',
sum(rd.[Points] + rd.[BonusPoints]) as 'TotalTeamPoints'
from
[TeamMembers] tm
left outer join
[Responses] r on r.[ParticipantId] = tm.[ParticipantId]
left outer join
[ResponseDetails] rd on r.[Id] = rd.[ResponseId]
where
tm.[TeamId] in (select [TeamId] from [TeamMembers]
group by [TeamId] having count([ParticipantId]) > 1)
group by
tm.[TeamId]
它返回正确的TeamId
和TotalTeamPoints
但不正确TotalMemberCount
(更高)。我有一种感觉,我错过了一些简单的事情,比如在某个地方进行分组。
答案 0 :(得分:0)
我怀疑左外连接导致了一些重复,这些重复被计入“count(tm。[ParticipantId])”。尝试“计数(不同的tm。[ParticipantId])”。