Access里使用SQL时遇到“必须使用一个可更新的查询?”

语句如下:UPDATE表1SET调整后=金额+金额*32/(SELECTSum(金额)AS求和FROM表1);目的是将“金额”这个字段进行调整,调整数为32,调整的方式是... 语句如下:
UPDATE 表1 SET 调整后 = 金额+金额*32/(SELECT Sum(金额) AS 求和
FROM 表1);
目的是将“金额”这个字段进行调整,调整数为32,调整的方式是,将金额的每个数字(记录)除以该列的金额合计,再乘以调整数。即把调整数按照金额比重分配给原有的金额,然后作为新的一列显示。

求大牛!!
重赏100+大洋!!答案正确还有追加!
展开
 我来答
tjrmgs
2015-05-28 · TA获得超过5765个赞
知道大有可为答主
回答量:2161
采纳率:94%
帮助的人:1024万
展开全部

想法很好,可惜ACCESS数据库Jet引擎比较弱,它支持用实际存在的字段来更新某个字段值,但是不支持用计算出来的字段来更新数据表。楼主的更新语句报错就是因此而产生的。


如果不做实际更新,运行选择查询将会很方便,例如下列语句

select a.* ,a.金额 + 32*a.金额/b.hj as 调整后 from 表1,
(select sum(金额) as hj from 表1)b;

或者运行生成表查询,生成一个含[调整后]字段的新表也很方便

select a.* ,a.金额 + 32*a.金额/b.hj as 调整后 into 新表1 
from 表1,(select sum(金额) as hj from 表1)b;

如果一定要更新表1,那就比较麻烦了,要分三步不走

1)为表1添加一个货币型字段[调整后]

alter table 表1 add column 调整后 money;

2)算出总金额保存到到一个新中间过渡表[hjb] ,实在没辙啊!

select sum(金额) as hj into hjb from 表1;

3)用hjb的hj字段取更新表1的[调整后]字段

update 表1 a,hjb b  set a.[调整后]=a.金额 + 32*a.金额/b.hj;


没办法,受ACCESS的局限,更新的话只能这么麻烦了


注意,因为要用总金额做除数,表一最少得有一笔金额数,否则会发生除以0的错误。

yueyangyxj
2015-05-28 · TA获得超过693个赞
知道小有建树答主
回答量:626
采纳率:85%
帮助的人:257万
展开全部
你这种写法在ACCESS里面是有问题的,在SQL就不会有问题,主要是ACCESS 不支持标准SQL的这种写法,并且很多在SQL里面的复杂语句,access都不支持,包含一些函数也是,你需要把SELECT Sum(金额) AS 求和 FROM 表1这个值弄出来,然后再进行更新
追问
但是百度和教程里都说access里面可以嵌套的,不会有错吧
追答
是可以嵌套,但是你发现大多数嵌套功能是很差的,在SQL上可以执行,但是放到ACCESS则无法执行了!如果你想这样做的话,可以在ACCESS写一个存储过程,把上面的一条语句分成2个步骤来执行!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d9b156865
2015-05-28 · TA获得超过165个赞
知道小有建树答主
回答量:384
采纳率:33%
帮助的人:193万
展开全部
把求和直接写成固定值呢?
追问
改成固定值是没问题的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式