2015-06-22 34 views
0

我正在使用Microsoft Access。我的要求是,用户将给出任何百分比值,我必须找到构成'Value'列百分比的ID号码。对于例如在下面的DataSet中(它是按值列的降序排序的,也是必需的),所有值的总和为'8409131'。选择记录数,直到总和小于'n' - 访问SQL

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,我也没有任何递增的升序行。

+0

如果你没有任何增量升行,你将如何确定行的顺序?或者你要求随机选择? – Gustav

+0

@Gustav我不得不添加序列行,但在访问中,我无法找出在select查询中添加连续行。 – RGR

+0

但是,如果没有进行排序,您无法在查询中添加序列号。如果不能定义排序,则可以使用随机序列。 – Gustav

回答

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