使用 MS Access SQL 填充总字段的百分比

Dan*_*vaw 2 ms-access ms-access-2013

我想填充,用SQL查询,现场F与百分比在总有些领域f,使得每个记录F(i)的字段F为:

F(i) = f(i)/SUM_i(f(i))
Run Code Online (Sandbox Code Playgroud)

字段f和 都F位于表中MyTable

然而,我正在努力开发一个能够做到这一点的查询。我的尝试是:

INSERT INTO MyTable (F)
SELECT f/MyField.fSum
FROM MyTable, (SELECT SUM(f) AS fSum FROM MyTable) AS MyField
Run Code Online (Sandbox Code Playgroud)

但是这段代码会在 table 中插入新行MyTable。我不知道如何从这里开始,因为我的理解是该UPDATE声明非常有限,并且对执行此操作没有用。

关于如何以最简单的形式做到这一点的任何想法?

我刚刚调用了这些列fF为了说明目的,这不是它们在实际数据库中的命名方式。

ype*_*eᵀᴹ 5

你需要UPDATE,而不是INSERT

UPDATE MyTable
SET F = f / (SELECT SUM(f) AS fSum FROM MyTable) ;
Run Code Online (Sandbox Code Playgroud)

或者:

UPDATE 
    MyTable AS my,
    (SELECT SUM(f) AS fSum FROM MyTable) AS total
SET my.F = my.f / total.fSum ;
Run Code Online (Sandbox Code Playgroud)

正如 mendosi 评论的那样,在不同的(大写/小写)大小写中具有相同名称的两列,例如f并且F不推荐在任何 DBMS 中使用,并且(不确定)甚至可能不允许在 Access 中使用。


然而,上述语句在 2013 版本中不起作用。我认为它们在旧(1997)版本中起作用,但 Jet 引擎(3.5?4.0?)中的一些更改使查询抛出错误。

使用该DSUM()函数进行求和,可以工作:

UPDATE MyTable
SET F = f / DSUM("f", "MyTable") ;
Run Code Online (Sandbox Code Playgroud)