如何显示所有部门的员工和参与者总数以及参与率?

时间:2012-05-16 04:29:49

标签: sql database sql-server-2008-r2

我有以下数据库设计:

Employees Table: EmployeeID, Name, OrgCode
Departments Table: OrgCode, DepartName
CompleteSurvey Table: ID, ParticipantID

我需要开发一个查询,显示一个表格,显示所有部门的员工总数以及在所有部门完成调查的参与者总数。

我可以通过以下查询找到所有部门的员工总数:

SELECT     COUNT(DISTINCT dbo.Employees.EmployeeID) AS [Total Number of Employees]
FROM         dbo.Departments INNER JOIN
                      dbo.Employees ON dbo.Departments.OrgCode = dbo.Employees.OrgCode CROSS JOIN
                      dbo.CompleteSurvey

然后,我可以通过以下查询找到所有部门的参与者总数:

SELECT     COUNT(DISTINCT dbo.CompleteSurvey.ID) AS [Total Number of Participants]
FROM         dbo.Departments INNER JOIN
                      dbo.Employees ON dbo.Departments.OrgCode = dbo.Employees.OrgCode INNER JOIN
                      dbo.CompleteSurvey ON dbo.Employees.EmployeeID = dbo.CompleteSurvey.RespondantID

但我应该只有一个查询。

例如,如果A部门有100名员工,参加人数为100人中的50人 B部门有80名员工,参加人数为30人

查询应显示以下内容:

所有部门的员工总数= 180

所有部门的参与者总数= 80

所有人的完成百分比= 80/180 = 44%

那怎么做?

2 个答案:

答案 0 :(得分:1)

我不知道SQL Server,我希望Oracle解决方案也能提供帮助:

select e.employees, c.respondents, (c.respondents / e.employees) * 100 percentage
  from (select count(*) employees from employees) e,
       (select count(*) respondents from complete_survey) c

答案 1 :(得分:0)

您无需在这些计算中涉及Department表:

SELECT
  TotalEmployees          = COUNT(*),
  TotalParticipants       = COUNT(s.ParticipantID),
  ParticipationPercentage = COUNT(s.ParticipantID) * 100.0 / COUNT(*)
FROM dbo.Employee e
  LEFT JOIN (SELECT DISTINCT ParticipantID FROM dbo.CompleteSurvey) s
    ON e.EmployeeID = s.ParticipantID