在MS Access 2013中满足条件时更新表中的字段

时间:2014-05-24 10:27:19

标签: ms-access ms-access-2010 ms-access-2013

我在MS Access 2013中有两个表。

服务表:

(ID是主键)

ID PART_ID SERVICE_DATE REMARK WITHDRAWN
1   A0001   01/04/2014 
2   A0002   01/04/2014
3   A0003   01/04/2014  SCRAP
4   A0004   01/04/2014
5   A0001   01/05/2014
6   A0002   01/05/2014

WITHDRAW表:

(ID是主键)

ID PART_ID DRAW_DATE
1   A0001  02/04/2014
2   A0002  02/04/2014
3   A0001  02/05/2014

我想在服务表的 WITHDRAWN 字段中添加“ NO ”,表示该部分尚未撤销,如果:

  
      
  1. 部分是服务表中的第一次,并且从未出现在WITHDRAW表中。
  2.   
  3. 部分在服务表和WITHDRAW表中出现几次,此次已经提供服务,尚未撤销。
  4.   
  5. 部分不属于“SCRAP”类别。
  6.   

目标结果:

服务表

ID PART_ID SERVICE_DATE REMARK WITHDRAWN
1   A0001   01/04/2014 
2   A0002   01/04/2014
3   A0003   01/04/2014  SCRAP
4   A0004   01/04/2014            NO
5   A0001   01/05/2014
6   A0002   01/05/2014            NO

但我只知道如何编写第一个条件的代码:

UPDATE SERVICE LEFT JOIN WITHDRAW ON SERVICE.PART_ID = WITHDRAW.PART_ID SET SERVICE.WITHDRAWN = "NO" WHERE WITHDRAW.PART_ID Is Null;

有人可以修改我的代码,以便我可以达到目标结果吗?谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你要找的是以下问题:

UPDATE service 
       LEFT JOIN withdraw 
              ON service.part_id = withdraw.part_id 
                 AND service.service_date <= withdraw.draw_date 
SET    service.withdrawn = "no" 
WHERE  withdraw.part_id IS NULL 
       AND Nz(service.remark, "") <> "scrap"; 

你的规则有点难以理解,但我想我明白了。我把规则1和2放在一起如下:

  

1.Part是服务表中的第一次,并且从未出现在WITHDRAW表中。

     

2.Part表中几次出现服务表和WITHDRAW表,这次已经提供服务,还没有退出。

==&GT;部件的service_date必须大于每个部件的最后一次withdraw_date。