简单的员工结构表
Employee Manager
Joe Smith Jon Smith
Jon Smith Pete Stevens
Pete Stevens NULL
Jared Scho Pete Stevens
....
我只是想回复一些结果,但我想要一个关于这个人是否是经理的指标,结果应该是:
Employee Manager IsAManager
Joe Smith Jon Smith 0
Jon Smith Pete Stevens 1
Pete Stevens NULL 1
Jared Scho Pete Stevens 0
结果集显示Joe Smith和Jared Scho不是经理......
所以如果我有一个简单的SQL查询
SELECT
Employee,
Manager,
As IsAManager --tried to do a case statement here....
FROM
Employee
我试图做一个案例声明,这个效果:
SELECT CASE ISNULL(COUNT(*), 0) > 0 THEN 1 ELSE 0 END FROM Employee WHERE Manager = Employee
不确定如何说出来:))
答案 0 :(得分:1)
要确定员工是否是经理,您需要将员工ID(在本例中为名称)与经理ID(在本例中为经理列)列表进行匹配。如果您找到匹配项,则该员工是经理。如果找不到匹配项,则该员工不是经理。
您可以使用LEFT OUTER JOIN执行此操作,如下所示:
SELECT DISTINCT
E.Employee,
E.Manager,
CASE WHEN M.Employee IS NULL THEN 0 ELSE 1 END As IsAManager
FROM
Employee E LEFT OUTER JOIN Employee M
ON E.Employee = M.Manager
请注意以下事项:
CREATE TABLE Managers (Employee. . . PRIMARY KEY)
。这将使得恢复经理状态所需的代码也更容易编写。答案 1 :(得分:1)
希望这只是一个演示示例,而不是真正的表结构。
SELECT Employee,
Manager,
CASE
WHEN EXISTS(SELECT *
FROM Employee e2
WHERE e2.Manager = e1.Employee) THEN 1
ELSE 0
END As IsAManager
FROM Employee e1
有关SQL Server如何处理CASE表达式EXISTS
子查询的详细信息,请参阅this article。