此查詢賦予您還沒有參加過任何測驗用戶的列表:
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)
更新,以回答問題評論:
要對每個測驗和分區的非paratipants進行分組和計數:
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
感謝您的幫助,我非常感謝。順便說一句,我可以合併他們兩個,並有一個查詢,顯示所有上述要求? – 2012-03-04 07:06:40
您可以在名稱和分區名稱後添加COUNT(*)作爲列。但是,這會給你在每一行返回的值重複相同的值,所以我認爲有一個單獨的查詢會更好。您也可以在接收數據的代碼中計算返回的行數,因此不需要組合它們。 – 2012-03-04 07:20:00
謝謝。但是如何在每個測驗中顯示非參與者名稱。我的意思是,我想要檢索QuizID。結果應按DivisionName和QuizID分組。怎麼做? – 2012-03-04 07:34:57