2012-10-18 39 views
-1

我完全不熟悉SQL。我创建了下面的表格..多列数和组

Employee 
- employee_id 
- employee_name 

Projects 
- project_id 
- project_name 

Roles 
- role_id 
- role_name 

Employee_project_role 
- employee_id 
- project_id 
- role_id 

我必须写一个查询:清单员工不同角色的数量,还列出了角色。 即如果员工(EMP1)在一个项目和试验机(试验)在其他两个不同的项目工作作为组长(TL),那么输出应该是:

employee_name count Role 
--------------------------- 
    emp1   1  TL 
    emp1   2  TEST 

回答

1
select 
    E.employee_name, 
    count(*) as cnt, 
    R.role_name 
from Employee_project_role as EPR 
    left outer join Employee as E on E.employee_id = EPR.employee_id 
    left outer join Roles as R on R.role_id = EPR.role_id 
group by E.employee_name, R.role_name 
3

尝试,

SELECT COUNT(my_table.*), my_table.employee_name, my_table.role 
FROM 
(SELECT r.role_name as role, e.employee_name as employee_name 
FROM employee e 
JOIN employee_project_role epr ON epr.employee_id = e.employee_id 
JOIN roles r ON r.role_id = epr.role_id) my_table 
GROUP BY my_table.employee_name, my_table.role; 
1

使用分组来总计项目总数。

SELECT emp.employee_name,count(proj.project_name),role.role_name 
FROM employee emp , project proj , role role , employee_project_role main 
WHERE emp.employee_id = main.employee_id 
AND proj.project_id = main.project_id 
AND role.role_id = main.role_id 
group by emp.employee_name , role.role_name 

检查在这里SqlFiddle