Как показать неучастников в каждом дивизионе? - PullRequest
0 голосов
/ 04 марта 2012

Я занимаюсь разработкой веб-приложения для интрасети, которое предоставляет пользователям короткие тесты.Вопрос заключается в следующем: у меня следующий дизайн базы данных:

Таблица сотрудников: Имя пользователя, Имя, Работа, DivisionID

Таблица подразделения: DivisionID, DivisionName

Таблица теста: QuizID,Заголовок, описание

Таблица UserQuiz: UserQuizID, Score, DateTimeComplete, QuizID, Имя пользователя

ПРИМЕЧАНИЕ. Первым атрибутом в каждой таблице является первичный ключ.

Мне нужно задать запрос, который показывает:

  • имена неучастников
  • Отдел
  • Общее количествоне участники

Так как это сделать?

1 Ответ

2 голосов
/ 04 марта 2012

Этот запрос дает вам список пользователей, которые не участвовали ни в одном тесте:

SELECT Name, DivisionName FROM Employee AS E
LEFT OUTER JOIN Division AS D ON E.DivisionID = D.DivisionID
WHERE Username NOT IN (SELECT Username FROM UserQuiz)

Это дает вам количество неучастников:

SELECT COUNT(*) FROM Employee
WHERE Username NOT IN (SELECT Username FROM UserQuiz)

ОБНОВЛЕНИЯ, чтобы ответить на вопросы в комментариях:

Чтобы сгруппировать и подсчитать число неучастников по каждому тесту и разделению:

SELECT Q.QuizId, D.DivisionName, E.Name FROM Quiz AS Q
CROSS JOIN Employee AS E
LEFT OUTER JOIN Division AS D ON E.DivisionID = D.DivisionID
WHERE NOT EXISTS (SELECT * FROM UserQuiz AS UQ 
    WHERE UQ.Username = E.Username AND UQ.QuizID = Q.QuizID)
ORDER BY Q.QuizId, D.DivisionName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...