2012-12-13 6 views
2

데이터 소스로서 여전히 MS Access를 사용하는 이전 웹 응용 프로그램에서 작업 중이며 SUM() 값의 순위를 매길 때 문제가 발생했습니다.MS 액세스 : 순위 SUM() 값

두 가지 계좌 번호가 있다고 가정 해보십시오. 각 계좌 번호에는 알 수없는 송장 수가 있습니다. 모든 송장의 합계를 계좌 번호별로 그룹화 한 다음 순위 (1-2)를 추가해야합니다.

원시 표 예 ...

계정 | 판매 | 인보이스 번호
001 | 400 | 123
002 | 150 | 456
001 | 300 | 789 개

원하는 결과 ...

계정 | 판매 | 순위
001 | 700 | 1
002 | 150 | 2

내가 시도

...

SELECT 계정, 계정

BY 송장 순서와 RANK 으로 판매 (송장 FROM SELECT COUNT (*)) AS SUM (판매)

하지만 쿼리는 순위가 아닌 해당 계정에 할당 된 레코드 수를 계속 반환합니다.

답변

0

가장 쉬운 방법은이 쿼리에서 그것을 파괴하는 것입니다, 첫 번째는이를 내가 qryInvoices로 저장 한 :

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

그리고 두 번째 쿼리는 다음과 같이 첫 번째 쿼리를 사용합니다.

나는 이것을 테스트했으며 질문에 설명 된대로 원하는 결과를 얻었습니다.

참고 : 정의 테이블을 사용하여 하나의 쿼리를 수행 할 수도 있지만이 경우에는보기가 조금 엉망이되었습니다.

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"인스턴스에 대해 다른 이름을 사용할 수도 있습니다 (이 경우 "접두어"접두사를 삭제할 수 있음).