表:
编号 职级 推荐人
001 B 003
002 C 001
004 B 001
003 A zz
006 A zz
005 B 006
想得到以下表:
编号 职级 上级领导
001 B 003
004 B 003
005 B 006
002 C 001
……
同职级推荐的按照推荐人向上找,所得上级领导职级要高于本职级
例如编号004 要找到他的上级领导是003
请问大家从优化的角度应该怎么写sql语句呢?
编号 职级 推荐人
001 B 003
002 C 001
004 B 001
003 A zz
006 A zz
005 B 006
想得到以下表:
编号 职级 上级领导
001 B 003
004 B 003
005 B 006
002 C 001
……
同职级推荐的按照推荐人向上找,所得上级领导职级要高于本职级
例如编号004 要找到他的上级领导是003
请问大家从优化的角度应该怎么写sql语句呢?
insert @ta select '001', 'B', '003'
union all select '002', 'C', '001'
union all select '004', 'B', '001'
union all select '003', 'A', 'zz'
union all select '006', 'A', 'zz'
union all select '005', 'B', '006'
select a.*
from @ta a left join @ta b on a.推荐人=b.编号
where a.职级>b.职级
order by a.职级 asc ,b.职级 desc(6 行受影响)
编号 职级 推荐人
----- ---- -----
001 B 003
005 B 006
002 C 001(3 行受影响)
,case
when ascii(t2.职级)-ascii(t1.职级)=1
then t2.推荐人
else t1.推荐人
end as 上级领导
from 表 as t1 right join 表 as t2 on t1.编号 = t2.推荐人 order by t2.职级上级领导没有的是null 不好意思哈才蔬学潜 脑子不够用