我对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
答案 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;