我有以下数据库设计:
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%
那怎么做?
答案 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