2011-07-18 23 views
4

我試圖從評語表和issue_assigneduser表中的相關記錄計數一起檢索問題表中的字段。如果有2篇評論和6級分配的用戶,我回來的值是12,這兩個方面。任何想法如何彌補這一點?SQL - 與LEFT OUTER JOIN計數是不正確

SELECT issue.issueid, COUNT(comment.commentid) AS CountOfComments, 
    Count(issue_assigneduser.userid) as CountOfAssignedUsers, 
    issue.title, issue.detail, issue.enteredby, 
    issue.datetimeentered, issue.assignedto, issue.categoryid, 
    issue.severityid, issue.statusid, 
    issue.lastcommentdatetime as LastCommentDateTime, 
    issue.lastcommentbyuserid, 
    users.initials as LastCommentUserInitials, 
    lookupstatus.status as Status, 
    lookupcategory.category as Category, 
    lookupseverity.severity as Severity, 
    GetUTCDate() as UTCDateTime 
FROM issue 
    INNER JOIN lookupcategory ON issue.categoryid = lookupcategory.categoryid 
    INNER JOIN lookupseverity ON issue.severityid = lookupseverity.severityid 
    INNER JOIN lookupstatus ON issue.statusid = lookupstatus.statusid 
    LEFT OUTER JOIN comment ON issue.issueid = comment.issueid 
    LEFT OUTER JOIN issue_assigneduser ON issue.issueid = issue_assigneduser.issueid 
    LEFT OUTER JOIN users ON issue.lastcommentbyuserid = users.userid 
GROUP BY issue.issueid, issue.title, issue.detail, 
    issue.enteredby, issue.datetimeentered, 
    issue.assignedto, issue.categoryid, 
    issue.severityid, issue.statusid, 
    issue.lastcommentdatetime, 
    issue.lastcommentbyuserid, 
    users.initials, lookupstatus.status, 
    lookupcategory.category, 
    lookupseverity.severityid, users.initials, 
    lookupstatus.status, lookupcategory.category, 
    lookupseverity.severity 
ORDER BY issue.lastcommentdatetime DESC; 

回答

6

使用COUNT(DISTINCT fieldname)代替COUNT (fieldname)

例如爲用戶

Count(DISTINCT issue_assigneduser.userid) as CountOfAssignedUsers 
+0

只是看出來,如果同一個用戶分配兩次,他將只一次用這種方法計算。 – pocketfullofcheese

+0

感謝您的警告。我的表格被設計爲使同一個用戶不能被分配兩次。 – HK1