对错误的分组执行 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;
我是 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;