【问题标题】:Select number of records until the sum is less than 'n' - Access SQL选择记录数,直到总和小于“n” - Access SQL
【发布时间】:2015-06-22 18:06:03
【问题描述】:

我正在开发 Microsoft Access。我的要求是,用户将给出任何百分比值,我必须找到构成“Value”列百分比的 ID 数量。例如在下面的数据集中(它也是按值列的降序排序,这也是必需的),所有值的总和是'8409131'。

ID          NAME  VALUE
1000000090  A     2295175
1000000974  B     1942753
1000015555  C     1887965
1000004864  D     1310400
1000015557  E     972838

如果我输入 75%,则值为 65170765.25,所以我需要返回所有形成 '65170765' 的 ID,小于或等于。所以在这种情况下,下面是小于 65170765 的值的总和。

ID          NAME  VALUE
1000000090  A     2295175
1000000974  B     1942753
1000015555  C     1887965

这可以实现我在 Access SQL 中的要求吗?

我的计划是创建一个运行总计列来查找前两行的总和,然后将该值与下一行的总和。但是在 Access 中,我无法弄清楚如何在选择查询中创建增量行来实现这一点。

我试过的查询:

SELECT T1.ID, T1.NAME, T1.VALUE,(T1.VALUE + T2.VALUE)  
FROM (
    SELECT  ID , RUN_MANAGER.NAME AS NAME, RUN_MANAGER.REPORTING_PERIOD, SUM(VALUE) As VALUE 
    FROM DATA 
    INNER JOIN RUN_MANAGER 
    ON DATA.RUN_NUMBER=RUN_MANAGER.RUN_NUMBER 
    WHERE  RUN_MANAGER.NAME='A' 
    GROUP BY ID,RUN_MANAGER.NAME 
    ORDER BY SUM(VALUE) DESC) AS T1 
INNER JOIN (
    SELECT ID , RUN_MANAGER.NAME AS NAME, RUN_MANAGER.REPORTING_PERIOD, SUM(VALUE) As VALUE 
    FROM DATA 
    INNER JOIN RUN_MANAGER 
    ON DATA.RUN_NUMBER=RUN_MANAGER.RUN_NUMBER 
    WHERE  RUN_MANAGER.NAME='A' 
    GROUP BY ID,RUN_MANAGER.NAME 
    ORDER BY SUM(VALUE) DESC) AS T2
ON T1.ID=T2.ID+1

这不是一个重复的问题。问题是,这个问题是基于 Access SQL 的,而且我没有任何递增的升序行。

【问题讨论】:

  • 如果您没有任何递增的升序行,您将如何确定行的顺序?还是您要求随机选择?
  • @Gustav 我必须添加序列行,但在访问中我无法弄清楚在选择查询中添加序列行。
  • 但是你不能在没有排序的情况下在查询中添加序列号。如果无法定义排序,也可以使用随机序列。

标签: sql ms-access vba ms-access-2010


【解决方案1】:

如果你有t这样的表:

ID          NAME VALUE
1000000090  A    2295175
1000000974  B    1942753
1000015555  C    1887965
1000004864  D    1310400
1000015557  E    972838

你可以使用这个查询:

SELECT  *   
FROM    t
WHERE   
    (SELECT SUM(VALUE) FROM t ti WHERE ti.Name <= t.Name) < (SELECT SUM(VALUE) FROM t ti) * 0.75

为此:

ID          NAME    VALUE
1000000090  A       2295175
1000000974  B       1942753
1000004864  D       1310400

【讨论】:

    猜你喜欢
    • 2012-07-26
    • 2013-08-01
    • 2019-06-18
    • 2020-09-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    相关资源
    最近更新 更多