Почему этот SQL-запрос не показывает нулевые функции COUNT? - PullRequest
0 голосов
/ 26 февраля 2012

Я занимаюсь разработкой простого теста для интрасети для своей компании и хочу, чтобы пользователь зашел на страницу теста «СТАРТ» и увидел общее количество участников в своем подразделении.Если в одной из викторин нет участников, следующий запрос должен отображать ноль, но сейчас он не показывает нули, и я не знаю почему:

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 Ответ

1 голос
/ 26 февраля 2012

Вам необходимо внешнее объединение, чтобы учесть случай, когда никто в вашем подразделении еще не прошел тест.

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...