表:
 编号   职级   推荐人
  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语句呢?

解决方案 »

  1.   

    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 行受影响)
      

  2.   

    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  不好意思哈才蔬学潜 脑子不够用