SQL计数基于两列

时间:2014-12-10 14:17:21

标签: sql sql-server-2008 count distinct multiple-columns

我有员工培训记录表(TRAINREC)

在此表中,它包含employees_ref和Course_Ref。

我需要计算有多少人完成了所有5门课程,有多少人完成了4,3,2,1和0

可能是他们不止一次完成相同课程的情况,因此在此表中同一课程会有多个条目,但它仍然只能算作一个。

计算条目(SQL Server)的最佳方法是什么,并计算已完成的人数" x"课程数量。

1 个答案:

答案 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;