0

次のデータベース設計があります。

Employee Table: Username, Name, DivisionCode
Division Table: SapCode, DivisionShortcut
Courses Table: CourseID, CourseName, GroupID
Groups Table: GroupID, GroupName
Employee_Courses Table: EmployeeID, CourseID

部門、コース、および各部門の参加者の総数を示す次のクエリを思いつきました。

SELECT     dbo.Divisions.DivisionShortcut, dbo.courses.CourseName, COUNT(dbo.employee_courses.courseId) AS [Total Number of Participants]
FROM         dbo.courses INNER JOIN
                      dbo.employee_courses ON dbo.courses.CourseID = dbo.employee_courses.courseId INNER JOIN
                      dbo.groups ON dbo.courses.GroupID = dbo.groups.ID RIGHT OUTER JOIN
                      dbo.employee AS employee_1 INNER JOIN
                      dbo.Divisions ON employee_1.DivisionCode = dbo.Divisions.SapCode ON dbo.employee_courses.employeeId = employee_1.Username
WHERE     (dbo.courses.GroupID = 1)
GROUP BY dbo.courses.CourseID, dbo.courses.CourseName, dbo.Divisions.DivisionShortcut

上記に加えて、各部門の従業員の総数と各部門の完了率も表示したいと思います。ちなみに、修了率は(各コースの総受講者数÷各部門の総社員数)です。

では、どうやってそれを行うのですか?

4

1 に答える 1

1

サブクエリを使用して、総従業員数を部門の結合に追加できます。例えば:

SELECT  d.DivisionShortcut
,       c.CourseName
,       d.EmployeeCount as DivisionEmployees
,       count(c.courseId) as CompletedCourses
,       100.0 * count(c.courseId) / d.EmployeeCount as PercentageCompleted
FROM    dbo.courses c
JOIN    dbo.employee_courses ec
ON      c.CourseID = ec.courseId
JOIN    dbo.employee e
ON      ec.employeeId = e.Username
JOIN    (
        select  d2.SapCode
        ,       d2.DivisionShortcut
        ,       count(e2.DivisionCode) as EmployeeCount
        from    dbo.Divisions d2
        JOIN    dbo.employee e2
        ON      d2.SapCode = e2.DivisionCode
        group by
                d2.SapCode
        ,       d2.DivisionShortcut
        ) d
ON      d.SapCode = e.DivisionCode
WHERE   c.GroupID = 1
GROUP BY 
        d.DivisionShortcut
,       d.EmployeeCount
,       c.CourseName
于 2012-06-24T08:18:41.593 に答える