2012-05-16 45 views
1

我有以下的數據庫設計:如何顯示所有部門的員工和參與者總數以及參與率?

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僱員和參加者的數目爲50選自100 和部B具有80僱員和參加者的數目爲30

查詢應顯示如下內容:

員工在各部門總數= 180

參與者在各部門總數= 80

在所有這些的完成百分比=一百八分之八十〇= 44%

那麼怎麼辦呢?

+1

[是否有問題的前答案](http://stackoverflow.com/questions/10605262/how-to-show-the-participation-percentage-in-each-department/10605689#10605689)? –

回答

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 
+0

感謝您的幫助。對此,我真的非常感激。 – user1395782

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 
+0

你可以計算回答,而不是參與者(同一人可以回答多個調查),但無論如何+1,這很容易糾正。在這種情況下,MS SQL的區別僅在於區分大小寫(=>'來自Employees','來自CompleteSurvey') – Aprillion

+0

感謝您的幫助。 – user1395782

相關問題