难以在同一张表上创建更新总计查询

Posted

技术标签:

【中文标题】难以在同一张表上创建更新总计查询【英文标题】:Difficulty in creating update totals query on same table 【发布时间】:2010-08-10 19:03:26 【问题描述】:

考虑下表:

ID nonUniqueID value total
--------------------------
1  12345        5     x
2  12345        10    x
3  789          20    x
4  789          5     x

我需要进行类似这样的查询(伪 SQL),这将在 Access 2007 中工作:

UPDATE table 
SET total = SUM(value) 
WHERE nonUniqueID IS SAME;

结果应该如下:

ID nonUniqueID value total
--------------------------
1  12345        5     15
2  12345        10    15
3  789          20    25
4  789          5     25

我尝试过 group bys,但我得到了奇怪的结果,坦率地说,我无法解释。有谁知道我怎样才能实现这样的目标?

【问题讨论】:

由于 Access 的限制,我发现最简单的解决方案是执行一个 select 语句,然后在 VBA 中循环遍历结果集以运行更新。 【参考方案1】:

不确定这是否适用于 Access,但请尝试一下:

update table t1
inner join (
    select nonUniqueID, sum(value) as SumValue
    from table
    group by nonUniqueID 
) t2 on t1.nonUniqueID = t2.nonUniqueID
set t1.total = t2.SumValue

更新:基于this question,它似乎无法正常工作。但是试一试!如果没有,您可以使用该问题中建议的方法。

【讨论】:

【参考方案2】:

另一个可能的选择:

update t 
set total = (select SUM(value) from table where nonUniqueID = t.nonUniqueID)
from table t

【讨论】:

以上是关于难以在同一张表上创建更新总计查询的主要内容,如果未能解决你的问题,请参考以下文章

我想在同一张表上创建更多触发器

无法在同一张表上查询和更新的问题解决方法

MySQL INSERT 在同一张表上使用带有 COUNT() 的子查询

同一张表上的多个事务,同时

如果更新,则在同一张表上执行触发器

更新时在同一张表上执行触发器