我的大脑正在变成木薯粉试图弄清楚这个。我有一张下属和监督员的表。每个员工都有很多课程。这是一个例子。
我有三个字段: employee_id,name,supervisor_id
弗雷德威尔基是一名主管,他的记录是....employee_id: 1
name: Fred Wilkie
supervisor_id: NULL
特德威尔基是一个卑微的工人,弗雷德是他的老板。他的条目看起来像这样......
employee_id: 2
name: Ted Wilkie
supervisor_id: 1
我希望我的查询看起来像employee_id,name和supervisor_id,但如果supervisor_id为NULL,supervisor_id应该等于employee_id。
这种方式有用......(我想我只需要以某种方式改进它)
select employee_id, name, supervisor_id case when supervisor_id is NULL then employee_id else supervisor_id end from employees order by supervisor_id;
问题在于它首先命令所有记录,其中employee_id等于supervisor_id,然后它只是吐出剩下的下属.......
employee_id, name, supervisor_id
1, Fred Wilkie, 1
4, Gail Winston, 4
2, Ted Wilkie, 1
3, Lisa Wilkie, 1
5, Russ Cablas, 4
6, Ben Reynolds, 4
etc, etc, etc...
我想要的是......
employee_id, name, supervisor_id
1, Fred Wilkie, 1
2, Ted Wilkie, 1
3, Lisa Wilkie, 1
4, Gail Winston, 4
5, Russ Cablas, 4
6, Ben Reynolds, 4
etc, etc, etc...
在上面的示例中,我列出了第一个主管(Fred)(employee_id = supervisor_id),然后是他的所有下属。之后是Gail,以及她所有的下属等等。我认为我的团队很弱。
我们经营一家大公司(250名员工),所以我们想要一种方法将其保留在MySQL逻辑中。有没有人有想法?
非常感谢! 珍妮
答案 0 :(得分:1)
最简单的解决方法是使用COALESCE
SELECT employee_ID,
name,
COALESCE(supervisor_id, employee_id) AS supervisor_id
FROM employees
ORDER BY supervisor_id, employee_ID
附加查询(如果你想获得他们的主管名称而不是id )
SELECT a.employee_ID,
a.name,
COALESCE(b.name, a.name) AS Supervisor_Name
FROM employees a
LEFT JOIN employees b
ON a.supervisor_ID = b.employee_ID
ORDER BY COALESCE(b.supervisor_id, a.employee_id), employee_ID
答案 1 :(得分:0)
select employee_id, name, supervisor_id case when supervisor_id is NULL then employee_id else supervisor_id end from employees order by supervisor_id ASC;
应该做的伎俩...
答案 2 :(得分:0)
我认为您错过了获取正在使用order by
的记录的序列,但没有突出显示序列ASC
或DESC
select employee_id, name,
supervisor_id case when supervisor_id is NULL
then employee_id else supervisor_id end
from employees
order by supervisor_id
ASC;
希望这有效