选择记录数,直到总和小于'n' - 访问SQL

时间:2015-06-22 08:13:20

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

我正在使用Microsoft Access。我的要求是,用户将提供任何百分比值,我必须找到形成“Value”列百分比的ID数量。对于例如在下面的DataSet中(它按值列的降序排序,也是必需的),所有值的总和是'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查询中创建增量行来实现此目的。

我试过查询:

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,而且我没有任何增量上升行。

1 个答案:

答案 0 :(得分: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