如何显示每个部门的非参与者?

时间:2012-03-04 06:46:27

标签: sql sql-server-2008-r2

我正在开发一个内部网Web应用程序,为用户提供简短的测验。 问题是:我有以下数据库设计:

员工表:用户名,姓名,职位,分部ID

分区表:DivisionID,DivisionName

测验表:QuizID,标题,描述

UserQuiz表:UserQuizID,Score,DateTimeComplete,QuizID,Username

注意:每个表中的第一个属性是主键。

我需要提出一个显示以下内容的查询:

  • 非参与者的姓名
  • 非参与者总数

那么怎么做?

1 个答案:

答案 0 :(得分:2)

此查询为您提供未参与任何测验的用户列表:

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