请大家帮忙看看~~~~~
表:
编号 职级 推荐人
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语句呢?
------解决方案--------------------declare @ta table(编号 varchar(5), 职级 varchar(2), 推荐人 varchar(5))
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 行受影响)
------解决方案--------------------select t2.编号,t2.职级
,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 不好意思哈才蔬学潜 脑子不够用