1

私は次のデータベース設計を持っています:

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

そして、すべての部門の従業員の総数と、すべての部門の調査を完了した参加者の総数を示すテーブルを表示する1つのクエリを開発する必要があります。

次のクエリで、すべての部門の従業員の総数を見つけることができます。

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

ただし、クエリは1つだけにする必要があります。

たとえば、部門Aに100人の従業員がいて、参加者の数が100人中50人で、部門Bに80人の従業員がいて、参加者の数が30人である場合

クエリには次のように表示されます。

すべての部門の従業員の総数=180

すべての部門の参加者の総数=80

それらすべての完了率=80/180= 44%

それで、それをどのように行うのですか?

4

2 に答える 2

1

SQLServerを知りません。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
于 2012-05-16T06:09:14.410 に答える
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
于 2012-05-17T07:58:49.433 に答える