update G  set G_qncq=(select sum(isnull(G_scqts,0)) from Gz_total where empID=G.empID and sessionID between @nID-12 AND @nID-1) 
from #tGz_Total  G left  join zlemployee E on G.empid=E.id 
where datediff(month,lzdate,@dDate0)=0
改语句是考勤系统里面的算法,我看不太明白,请各问指点,G_qncq=全年总出勤 G_scqts=实际出勤天数,lzdate=离职日期下面三个字段具体是什么看不太明白@nID-12 , @nID-1,,@dDate0 。

解决方案 »

  1.   

    update G 
    set G_qncq=(select sum(isnull(G_scqts,0)) 
                from Gz_total where empID=G.empID and sessionID between @nID-12 AND @nID-1) 
    from #tGz_Total G left join zlemployee E on G.empid=E.id 
    where datediff(month,lzdate,@dDate0)=0========
    @nID-12 AND @nID-1这两个是临时变量,应该是你传进来的参数
    datediff(month,lzdate,@dDate0) ---,@dDate0也是你传进来的参数,datediff函数参考联机文件
      

  2.   

    @nID 是你的程序里面的参数,你自己应该比较清楚。(@nid是否是月度呢)
    @dDate0 是你的程序里面的参数,你自己应该比较清楚。
    这句话的意思是"
    根据你传入的“日期”查询这个日期当月离职人员的总出勤.
    (还有一条件 @nID-12 AND @nID-1)
    因不知道你的@nID是什么意思 ,所以就不能给出正确的理解了
      

  3.   

    由于不能编辑帖子,只能在这里补充一下,这个语句的功能是求离职人员的全年出勤天数。是用来计算离职人员补年假工资用的G_bnjgz(补年假工资)=(isnull(G_dxs,0)+isnull(G_zwjt,0))/21.75*isnull(G_qncq,0)/365*isnull(G_lzbnj,0)
    G_qncq(全年总出勤)=update G set G_qncq=(select sum(isnull(G_scqts,0)) from Gz_total where empID=G.empID and sessionID between @nID-12 AND @nID-1)  
    from #tGz_Total G left join zlemployee E on G.empid=E.id  
    where datediff(month,lzdate,@dDate0)=0我自己对G_qncq(全年总出勤)算出来的天数有疑问,感觉结果是不对的,所以想请教各位。我想了解G_qncq算出来的结果是什么。谢谢。
      

  4.   

    @nID-12 AND @nID-1-----这两个你可以参考表里面的sessionID看看,类似传两个进来
    datediff(month,lzdate,@dDate0) ---,@dDate需要传入的是一个日期,类似2010-11-07
      

  5.   

    因为你不是写程序的,你可能也不能进行调试了。也可能很难知道传的@nID是什么。但我觉得@nID似乎是个月度的意思。你会写SQL语句吧。建议你测试以下的语句 ,查一个离职的人员的出勤总合,是否OK。当然你问问程序开发人员是最好不过了,尤其是@nID的意思 。
    select sum(isnull(G_scqts,0)) 
                from Gz_total where empID='张三的工号' and sessionID between @nID-12 AND @nID-1
    and datediff(month,lzdate,@dDate0)=0
      

  6.   

    谢谢,我也觉得@nid应该月份之类的,由于@nid是临时变量,在sql query analyzer里面无法成功运行你给出的语句。不是该程序的开发人员还真不好猜是什么意思。呵呵