日期:2014-05-18  浏览次数:20459 次

请大家帮忙看看~~~~~
表:
  编号       职级       推荐人
    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 不好意思哈才蔬学潜 脑子不够用