我有一个包含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
答案 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