Office中国论坛/Access中国论坛

标题: 多条件更新查询 [打印本页]

作者: saraou    时间: 2012-1-12 14:07
标题: 多条件更新查询
我的例子里的更新查询Update top ten vendor_2,目的是想找出FOB排名前十位的supplier然后更新表supplier里面的字段Supplier type为top ten vendor。
但是现在用的方法写的sql语句很长。而且每个月做报告的时候排前十的supplier可能会改变。这样的话就要手动去更改Update top ten vendor_2 里面条件。
我做了一个查询Top ten vendor FOB Sum是找出FOB前十名的supplier的名单。

请问能否在更新查询Update top ten vendor_2的代码里面改写,让更新查询去判断表里的supplier是否存在于查询Top ten vendor FOB Sum中。如果存在,则进行更新。这样,每次前十名变动了就不用手动更改条件,减少出错的机会。
以下是更新查询的sql语句。

UPDATE Suppliers SET Suppliers.[Supplier type] = iif(Suppliers.[Supplier Name]="Mayumi's","Top ten vendor",iif(Suppliers.[Supplier Name]="Leka Trading","Top ten vendor",iif(Suppliers.[Supplier Name]="Formaggi Fortini s.r.l.","Top ten vendor",iif(Suppliers.[Supplier Name]="Refrescos Americanas LTDA","Top ten vendor",iif(Suppliers.[Supplier Name]="Pavlova, Ltd.","Top ten vendor",iif(Suppliers.[Supplier Name]="Ma Maison","Top ten vendor",iif(Suppliers.[Supplier Name]="Lyngbysild","Top ten vendor",iif(Suppliers.[Supplier Name]="Escargots Nouveaux","Top ten vendor",iif(Suppliers.[Supplier Name]="New England Seafood Cannery","Top ten vendor",iif(Suppliers.[Supplier Name]="Heli Süßwaren GmbH & Co. KG","Top ten vendor",Suppliers.[Supplier Name]))))))))))
WHERE Suppliers.[Supplier Name]="Mayumi's" or Suppliers.[Supplier Name]="Leka Trading" or Suppliers.[Supplier Name]="Formaggi Fortini s.r.l." or Suppliers.[Supplier Name]="Refrescos Americanas LTDA" or Suppliers.[Supplier Name]="Pavlova, Ltd." or Suppliers.[Supplier Name]="Ma Maison" or Suppliers.[Supplier Name]="Lyngbysild" or Suppliers.[Supplier Name]="Escargots Nouveaux" or Suppliers.[Supplier Name]="New England Seafood Cannery" or Suppliers.[Supplier Name]="Heli Süßwaren GmbH & Co. KG";

[attach]48069[/attach]


作者: todaynew    时间: 2012-1-12 17:27
iif(Suppliers.[Supplier Name] in ("Mayumi's","Leka Trading","Formaggi Fortini s.r.l."),"Top ten vendor",Suppliers.[Supplier Name])
作者: roych    时间: 2012-1-12 17:31
本帖最后由 roych 于 2012-1-12 17:36 编辑

太复杂了……用子查询更新试试看?
UPDATE Suppliers SET Suppliers.[Supplier type] = "Top ten vendor"
WHERE (((Suppliers.[Supplier Name]) In (select top 10 [supplier name] from [Suppliers FOB Sum])));
里面写了一个宏,每次需要更新时执行即可。
[attach]48073[/attach]
作者: saraou    时间: 2012-1-12 17:41
roych 发表于 2012-1-12 17:31
太复杂了……用子查询更新试试看?
UPDATE Suppliers SET Suppliers.[Supplier type] = "Top ten vendor"
...

用你的方法出来的结果是更新了Suppliers FOB Sum查询里面supplier按名字从a开始排序的前十个。而不是更新FOB排名前十的supplier。
作者: roych    时间: 2012-1-12 17:48
把条件改下:
In (select top 10 [supplier name] from [Top ten vendor FOB Sum])
作者: saraou    时间: 2012-1-13 10:35
roych 发表于 2012-1-12 17:48
把条件改下:
In (select top 10 [supplier name] from [Top ten vendor FOB Sum])

之前没有看到你的附件。现在解决了。谢谢,真是高手。学到不少。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3