2015-06-22 31 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