2012-12-13 40 views
2

我正在處理仍在使用MS Access的舊網絡應用程序,因爲它是數據源,並且在嘗試對SUM()值進行排名時遇到了問題。MS Access:Rank SUM()值

比方說,我有兩個不同的帳號,每個帳號都有未知數量的發票。我需要總結所有發票的總數,按帳號分組,然後添加排名(1-2)。

原始表格示例...

賬戶|銷售|發票號碼
001 | 400 | 123
002 | 150 | 456
001 | 300 | 789種

預期的效果...

帳號|銷售|等級
001 | 700 | 1
002 | 150 | 2

我想...

選擇帳戶,SUM(銷售)銷售, (SELECT COUNT(*)FROM發票)秩 從發票 ORDER BY帳戶

但是,查詢不斷返回分配給該帳戶的記錄數量,而不是等級。

回答

0

最簡單的方法是將它分解到2個查詢,第一個是這個,我已經保存爲qryInvoices

SELECT Invoices.Account, Sum(Invoices.Sales) AS Sales 
FROM Invoices 
GROUP BY Invoices.Account; 

而且那麼第二個查詢使用第一個如下:

SELECT qryInvoices.Account, qryInvoices.Sales, (SELECT Count(*) FROM qryInvoices AS I WHERE I.Sales > qryInvoices.Sales)+1 AS Rank 
FROM qryInvoices 
ORDER BY qryInvoices.Sales DESC; 

我測試了這個,並得到了問題中所述的預期結果。

注意:使用定義的表可能可以在一個查詢中實現,但在這種情況下,它看起來有點難看。

0

如果您需要在一個查詢答案,它應該是

SELECT inv.*, ( 
    SELECT 1+COUNT(*) FROM (
     SELECT Account, Sum(Sales) AS Sum_sales FROM Invoices GROUP BY Account 
    ) WHERE Sum_sales > inv.Sum_sales 
) AS Rank 
FROM (
    SELECT Account, Sum(Sales) AS Sum_sales FROM Invoices GROUP BY Account 
) inv 

我已經嘗試過了獲取和它的作品。您也可以對上述兩個「Sum_sales」實例使用不同的名稱以避免混淆(在這種情況下,您可以刪除「inv。」前綴)。