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

时间:2015-03-25 10:49:58

标签: sql sql-server-2008 reporting-services ssrs-2008

我对SQL很新,并且在子查询上遇到问题,该子查询在错误的分组上执行计数。我对此表示感谢。

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

我正在尝试加入TblGroup,TblGroupSession和TblGroupSUAttendee,并计算任何GROUP的GroupSUAttendee的DISTINCT数。下面的查询是在任何SESSION计算GroupSUAttendee的不同数量,因此当我为一个组添加计数时,如果TblGroupSUAttendee参加了多个会话,我将获得重复。

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

思考/建议/指针非常感谢。 谢谢 EILS

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

1 个答案:

答案 0 :(得分:0)

如果您想计算群组中的与会者,请使用group by,但不要包含每会话信息。换句话说,只需将组与会话组合在一起,并将参与者与一个查询中的会话组合在一起。然后按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;