选择记录数,直到总和小于'n' - 访问SQL
问题描述:
我正在使用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,我也没有任何递增的升序行。
答
如果你有一个像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
如果你没有任何增量升行,你将如何确定行的顺序?或者你要求随机选择? – Gustav
@Gustav我不得不添加序列行,但在访问中,我无法找出在select查询中添加连续行。 – RGR
但是,如果没有进行排序,您无法在查询中添加序列号。如果不能定义排序,则可以使用随机序列。 – Gustav