2012-02-26 3 views
0

저는 회사를위한 간단한 인트라넷 퀴즈 엔진을 개발 중입니다. 사용자가 퀴즈의 시작 페이지로 이동하여 자신의 부서에있는 총 참가자 수를보고 싶을 때가 있습니다. 퀴즈 중 하나에는 참여자가없는 경우, 다음 쿼리는 제로를 표시해야하지만, 지금은 제로를 표시하지 않는 이유를 모르겠어요 : 이 SQL 쿼리에 COUNT 함수가 0으로 표시되지 않는 이유는 무엇입니까?

SELECT  dbo.Divisions.DivisionShortcut AS Division, COUNT(DISTINCT dbo.UserQuiz.Username) AS [Number of Participants] 
FROM   dbo.Divisions INNER JOIN 
         dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode INNER JOIN 
         dbo.UserQuiz ON dbo.employee.Username = dbo.UserQuiz.Username INNER JOIN 
         dbo.Quiz ON dbo.UserQuiz.QuizID = dbo.Quiz.QuizID 
WHERE  (dbo.Quiz.QuizID = @QuizID) AND (dbo.Employee.Username = @Username) 
GROUP BY dbo.Divisions.DivisionShortcut 

그래서 어떻게 그것을 해결하기 위해?

답변

1

부서의 아무도 아직 퀴즈를 풀지 않은 경우에 대비하여 외부 참여가 필요합니다.

SELECT 
    Division = d.DivisionShortcut, 
    [Number of Participants] = COUNT(DISTINCT uq.Username) 
FROM dbo.Divisions AS d 
INNER JOIN dbo.Employee AS e 
ON d.SapCode = e.DivisionCode 
LEFT OUTER JOIN dbo.UserQuiz AS uq 
ON e.Username = uq.Username 
LEFT OUTER JOIN dbo.Quiz AS q 
ON uq.QuizID = q.QuizID 
AND dbo.Quiz.QuizID = @QuizID 
WHERE e.Username = @Username 
GROUP BY d.DivisionShortcut; 
+0

0은 표시되지 않습니다. –

+0

또한 해당 부서의 직원 중 한 명이 퀴즈 중 하나에 참여하면이 쿼리는 참가자가없는 경우에도 모든 퀴즈에서 참가자 수를 1로 표시합니다. –

+0

우리가 추측 할 필요가 없도록 샘플 데이터와 원하는 결과를 보여주십시오. –

관련 문제