2015-03-25 54 views
0

我對SQL相當陌生,並且對在錯誤分組上執行計數明確的子查詢有問題。我會很感激任何幫助。在錯誤的分組上執行COUNT DISTINCT的子查詢

我有一個與MS SQL Server(SSRS 2008)報表相關的特定組的會話參加者。

我想加入TblGroup,TblGroupSession和TblGroupSUAttendee並計算GROUPSUAttendee在任何GROUP的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

如果你想組內計數的與會者,然後用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; 
+0

感謝您的快速回答!我做了一個小修改 'ON ga.GroupSUAttendeeGroupSessionId = gs.GroupSessionId',它可以作爲一個獨立的查詢,但我需要爲我的查詢中的會話保留行以用於其他目的,所以我不太確定如何使它成爲子查詢 – EileenS 2015-03-25 11:49:39