select id,name from kmtable k where not exists(select * from kmtable where id=k.left(id,len(k.id)-2)) where len(id)>=5

解决方案 »

  1.   

    上边 k.left(id,len(k.id)-2))  是电脑的笔误,应为 left(k.id,len(k.id)-2)。这样的简单的问题最好自己动脑筋!
      

  2.   

    看我的笨办法:
    /*
      分开每级科目进行判断是否有上级科目存在
      如果要判断跨级的情况(如:无102,有10201,1020101,则10201,1020101均要显示
      则将'='改为'>='
    */
    select * --判断二级科目是否有上级科目
    from 科目库
    where len(科目编号)=5 and left(科目编号,3) not in
    (select 科目编号 from 科目库)
    union
    select * --判断三级科目是否有上级科目
    from 科目库
    where len(科目编号)=7 and left(科目编号,5) not in
    (select 科目编号 from 科目库)
    union
    select * --判断四级科目是否有上级科目
    from 科目库
    where len(科目编号)=9 and left(科目编号,7) not in
    (select 科目编号 from 科目库)
    union
    select * --判断五级科目是否有上级科目
    from 科目库
    where len(科目编号)=11 and left(科目编号,9) not in
    (select 科目编号 from 科目库)
    union
    select * --判断六级科目是否有上级科目
    from 科目库
    where len(科目编号)=13 and left(科目编号,11) not in
    (select 科目编号 from 科目库)
    union
    select * --判断七级科目是否有上级科目
    from 科目库
    where len(科目编号)=15 and left(科目编号,13) not in
    (select 科目编号 from 科目库)