1

쿼리를 기반으로하는 보고서가 있습니다. 보고서의 세부 섹션에서 세부 행 수를 맨 위 N으로 제한하려고합니다 (선택 TOP N 유형 쿼리와 같습니다). 이 샘플에서는 상위 2 행을 원합니다. 내가 가지고있는 쿼리는 지금까지 내가 가입하고 몇 가지는 할 및 계산 할 필요가 알고액세스 보고서 세부 구역에서 상위 N을 선택하거나 SQL 하위 쿼리에서 상위 N을 선택하는 방법

SELECT TestTable.[GroupByCol], TestTable.[DetailColA] 
FROM TestTable group by TestTable.[GroupByCol], TestTable.[DetailColA] 

하지만 그냥 클릭 아니에요. 또한 스크린 샷을 첨부했습니다.

알려 주시기 바랍니다. 당신 enter image description here

+0

'ORDER BY'를 지정해야합니다. 그렇지 않으면 "TOP 2"가 무의미 할 수 있으므로 의미가 없습니다. – Jacob

+0

@cularis. 예. 아래의 mwolfe02의 대답은 이제 분명합니다. thx – Gullu

답변

2

보고서의 레코드 원본으로 다음과 같은 쿼리를 시도 감사 :

SELECT TestTable.GroupByCol, TestTable.DetailColA 
FROM TestTable 
WHERE TestTable.DetailColA IN 
    (SELECT TOP 2 DetailColA FROM TestTable AS TT 
    WHERE TT.GroupByCol=TestTable.GroupByCol 
    ORDER BY TT.DetailColA) 
ORDER BY TestTable.GroupByCol, TestTable.DetailColA 

참조 앨런 브라운의 Subquery Basics 더 많은 정보를 얻을 수 있습니다.


편집 : 당신은 당신의 코멘트에 언급,이 다음과 같이도 쓸 수있다 : 당신은 확실하게 벤치 마크 할 것이다

SELECT a.GroupByCol, a.DetailColA, COUNT(*) As RankNumber 
FROM TestTable AS a INNER JOIN TestTable AS b 
    ON a.GroupByCol = b.GroupByCol 
AND a.DetailColA >= b.DetailColA 
GROUP BY a.GroupByCol, a.DetailColA 
HAVING COUNT(*)<=2 
ORDER BY a.GroupByCol, a.DetailColA, COUNT(*) 

하지만이 두 번째 버전은 아마 더 효율적입니다. 어느 것이 더 가독성이 있는지는 아마도 개인적 취향의 문제 일 것입니다 (저는 첫 번째 버전이 더 직관적이고 읽기 쉽다고 생각합니다).

+0

thx @ mwolfe02. 이것은 효과가있다. 내일 테스트하고 업데이트합니다. having 절을 사용하여이 쿼리를 작성하는 또 다른 방법이 있습니까? 사실 나는 비슷한이 질문에서 혼란스러워했다. http://stackoverflow.com/questions/3481916/access-top-n-in-group – Gullu

+0

감사. 고마워 – Gullu