我有员工培训记录表(TRAINREC)
在此表中,它包含employees_ref和Course_Ref。
我需要计算有多少人完成了所有5门课程,有多少人完成了4,3,2,1和0
可能是他们不止一次完成相同课程的情况,因此在此表中同一课程会有多个条目,但它仍然只能算作一个。
计算条目(SQL Server)的最佳方法是什么,并计算已完成的人数" x"课程数量。
答案 0 :(得分:1)
假设您的主要工作人员表是Employee
,您需要做两个不同的计数,第一个是每个人完成的课程数量:
SELECT e.employ_ref,
Courses = COUNT(DISTINCT tr.Course_Ref)
FROM Employee AS e
LEFT JOIN TrainRec AS tr
ON tr.employ_ref = e.employ_ref
GROUP BY e.employ_ref;
使用DISTINCT
可以确保每位员工只计算一次不同的课程。
然后,您需要对第一个查询中的Courses
列进行单独计数:
SELECT Courses,
Employees = COUNT(*)
FROM ( SELECT e.employ_ref,
Courses = COUNT(DISTINCT tr.Course_Ref)
FROM Employee AS e
LEFT JOIN TrainRec AS tr
ON tr.employ_ref = e.employ_ref
GROUP BY e.employ_ref
) AS t
GROUP BY Courses;