select a.*,isnull(b.kss,0) as kss,isnull(c.kGet) as kGet
from kmain.dbo.kemployce as a left join 
(select kcode,sum(kss) as kss from ktrade.dbo.know_wage group by kcode) as b 
on a.kcode=b.kcode
left join 
kbase.dbo.kpart_get  as c
on a.kduty=c.kduty
and b.kss>=c.kbegin
and b.kss<=c.kend

解决方案 »

  1.   

    select a.*,isnull(b.kss,0) as kss,isnull(c.kGet) as kGet
    from kmain.dbo.kemployce as a inner join 
    (select kcode,sum(kss) as kss from ktrade.dbo.know_wage group by kcode) as b 
    on a.kcode=b.kcode
    left join 
    kbase.dbo.kpart_get  as c
    on a.kduty=c.kduty
    and b.kss>=c.kbegin
    and b.kss<=c.kend
      

  2.   


    呵呵,这么快啊!我试一下!看来我原来的想法只有分成两个查询才行!对不 ? yang ?!
      

  3.   

    Yang_(扬帆破浪):  "最接近的" 没实现!至少应该有 MIN(kduty - kbegin) or MIN(kend - kduty)
      

  4.   

    Yang_(扬帆破浪) 的是对的,and b.kss>=c.kbegin and b.kss<=c.kend 就是用来找"最接近的",其实贴主的意思应该是落在范围之内的,用"最接近的"有点不恰当。
      

  5.   

    是这样的,上次回答过搂主的问题,说的是在范围内,就取kget ,我反问了不落在范围内怎么办,"最接近的"是他现在的说法,不指导意义有没有变化。