之前做了个更新程序:update   考勤表 set 考勤表.bc2 = 调班表.bc,考勤表.blb = case when 调班表.blb >0 then 调班表.blb end from 调班表 inner join 考勤表 on 调班表.ny = 考勤表.ny 
and 调班表.xm = 考勤表.xm where 考勤表.ny = @ny and 考勤表.rq >= 调班表.rq1 and 考勤表.rq <= 调班表.rq2 后来发现,需要按照调班表里面的输入时间rq 升序更新
请问如何实现比较有效率
目前的sql 版本是2000
谢谢

解决方案 »

  1.   

    调班表数据
    ny dh rq xm rq1 rq2 bc blb bz
    1203 1 2012-3-13 14:43:52 陈加宙 2012-3-8 2012-3-8 11 0
    1203 1 2012-3-13 14:44:14 陈加宙 2012-3-8 2012-3-8 11 3
    1203 1 2012-3-13 14:51:06 陈加宙 2012-3-9 2012-3-9 11 0
    1203 1 2012-3-13 14:51:27 陈加宙 2012-3-9 2012-3-9 11 3
    如果按照之前的做法更新,陈加宙 3月9日的班类别blb 可能就是3了
    如果按照输入时间rq排序后更新就没有问题
      

  2.   

    UPDATE  b
    SET     b.bc2 = a.bc ,
            b.blb = a.blb
    FROM    调班表 AS a
            INNER JOIN 考勤表  as b ON a.ny = b.ny
                              AND a.xm = b.xm
    WHERE   b.ny = @ny
            AND a.rq1=(SELECT TOP 1 rq1 FROM 调班表 WHERE ny=b.ny AND xm=b.xm AND b.rq>=rq1 AND b.rq<=rq2 ORDER BY rq1 desc)楼主测试一下结果
      

  3.   

    谢谢
    UPDATE  b
    SET     b.bc2 = a.bc ,
            b.blb = a.blb
    FROM    调班表 AS a
            INNER JOIN 考勤表  as b ON a.ny = b.ny
                              AND a.xm = b.xm
    WHERE   b.ny = @ny
            AND a.rq=(SELECT TOP 1 rq FROM 调班表 WHERE ny=b.ny AND xm=b.xm AND b.rq>=rq1 AND b.rq<=rq2 ORDER BY rq1)
    这样就比较接近了,晚上回去再试试 =。=