2012-02-26 172 views
0

我正在为我的公司开发一个简单的Intranet测验引擎,我希望当用户进入测验的START页面时查看他的部门的参与者总数。如果在测验中的一个没有参与者,下面的查询应显示为零,但现在它不显示零,我不知道为什么:为什么这个SQL查询不显示零COUNT函数?

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

它不显示任何零。 – 2012-02-27 04:06:48

+0

此外,如果该部门的其中一名员工参与了其中一个可用测验,则即使没有参与者,该查询也会在所有测验中显示参与人数为1。 – 2012-02-27 04:36:51

+0

请显示样本数据和期望的结果,所以我们不必猜测。 – 2012-02-27 04:53:52