对错误的分组执行 COUNT DISTINCT 的子查询

Subquery performing a COUNT DISTINCT on the wrong grouping

我是 SQL 的新手,我对一个子查询有问题,该子查询对错误的分组执行不同的计数。如果有任何帮助,我将不胜感激。

我在 session 有一个特定组的与会者,我正在查询 MS SQL 服务器 (SSRS 2008) 报告。

我正在尝试加入 TblGroup、TblGroupSession 和 TblGroupSUAttendee,并计算任何 GROUP 中 GroupSUAttendee 的 DISTINCT 数量。下面的查询正在计算任何 SESSION 的 GroupSUAttendee 的不同数量,因此当我将一个组的计数加在一起时,如果 TblGroupSUAttendee 参加了一个以上 session.

我需要在查询中为每个 session 保留一行,因为我需要它用于其他目的,但是每个 session 行显示该组的 TblGroupSUAttendees 的完整总数就可以了因为我可以在我的 SSRS 报告中每组引用一次该值。

Thoughts/advice/pointers 非常感谢。 谢谢 艾尔斯

SELECT 
  TblGroup.GroupId
  ,TblGroupSession.GroupSessionId
  ,TblGroupSession.GroupSessionDate
  ,TblGroupSUAttendee.GroupSUAttendeeCount

FROM
  TblGroup
  LEFT OUTER JOIN TblGroupSession
    ON TblGroup.GroupId = TblGroupSession.GroupSessionGroupId

LEFT OUTER JOIN (select COUNT(DISTINCT GroupSUAttendeeId) AS GroupSUAttendeeCount,
                    GroupSUAttendeeGroupSessionId
                    FROM TblGroupSUAttendee
                    GROUP BY GroupSUAttendeeGroupSessionId) as TblGroupSUAttendee ON GroupSUAttendeeGroupSessionId = TblGroupSession.GroupSessionId

WHERE
GroupSessionDate >= @StartDate AND GroupSessionDate <= @EndDate

如果您想要统计组内的与会者人数,请使用 group by,但不要包含 per-session 信息。换句话说,只需将组与会议以及会议与与会者组合在一个查询中即可。然后按 GroupId 汇总并计算与会者人数:

SELECT g.GroupId,
       COUNT(DISTINCT GroupSUAttendeeId) AS GroupSUAttendeeCount
FROM TblGroup g LEFT OUTER JOIN 
     tblGroupSession gs
     ON g.GroupId = gs.GroupSessionGroupId LEFT OUTER JOIN
     TblGroupSUAttendee ga
     ON ga.GroupSUAttendeeGroupSessionId = gs.GroupSessionId
GROUP BY g.GroupId;