1

我有一张员工表,里面有经理和代表。我想要一个存储过程,它可以获取 Manager 1(字母顺序),然​​后是 Manager1 下的所有代表(按字母顺序),然​​后是 Manager 2 和 Manager2 下的所有代表。

对于每个 Rep,在该列中具有 Manager 的 EmployeeID 的所有员工都有一个列“经理”,对于经理,则为 null。还有一个列 ismanager,其中 1 代表经理,0 代表代表。

我试过这样做,但逻辑不正确。这是在SQL Server 2005.

先感谢您!!

Select * from Employees
groupby IsManager, EmployeeID
4

2 回答 2

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

注意——未测试可能有错别字。

于 2012-09-26T15:07:31.843 回答
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
于 2012-09-26T15:10:12.187 回答