在Employee表中为Manager和Reps分组

时间:2012-09-26 15:01:42

标签: sql sql-server

我有一个包含Managers和Reps的员工表。我想要一个可以获得Manager 1(字母顺序)的存储过程,然后是Manager1下的所有Reps(按字母顺序),然​​后是Manager2下的Manager 2和所有Reps。

对于每个Rep,该列中有一个EmployeeID为Manager的所有员工都有一个列'Manager',而对于Managers则为null。还有一个列ismanager,管理员为1,代表为0。

我尝试过,但逻辑错误。这是SQL Server 2005

提前谢谢!!

Select * from Employees
groupby IsManager, EmployeeID

2 个答案:

答案 0 :(得分:1)

您要做的是通过经理ID订购,然后通过ismanager desc订购。 由于管理器在管理器列中没有自己的id,因此您使用case语句来修复它。以下是在SQL中如何执行此操作的两个示例:

WITH fixup AS
(
   SELECT CASE MANAGER = 0 THEN EMPLOYEEID ELSE MANAGER END as ManGroup, *
   FROM Employees
)
SELECT * from fixup
ORDER BY ManGroup, ismanager DESC

SELECT * 
FROM Employees
ORDER BY CASE MANAGER = 0 THEN EMPLOYEEID ELSE MANAGER END, ismanager DESC

nb - 未经测试可能存在拼写错误。

答案 1 :(得分:0)

select  case when isManager=1 then man.name else 'Unmanaged' end as managerName,
        emp.name
from    employees emp left join employees man on emp.manager = man.employeeId
order by case when isManager=1 then 0 else 1 end, 
        case when isManager=1 then man.name else 'Unmanaged' end,
        emp.name