2008-10-08 3 views
2

관련 레코드의 하위 보고서가 포함 된 Access 2003에서 보고서를 만들고 있습니다. 하위 보고서에서 상위 2 개 레코드 만 원합니다. 하위 보고서의 쿼리에 "TOP 2"를 추가하면 링크 필드를 필터링하기 전에 상위 두 레코드를 선택하는 것으로 보입니다. 해당 링크 필드에 적용되는 레코드 중 상위 두 레코드 만 얻으려면 어떻게합니까? 감사.Access 하위 보고서에서 top 절 사용

답변

1

나는이 개 제안이있어 : 매개 변수로 쿼리에
1) 부모 폼에 마스터 필드 (패스) (당신은))
이 직접뿐만 아니라 부모 폼에 당신을 필드를 참조 할 수있다 Access에서 밖으로 가짜 rownumbers하고, 오직 ROWNUM < = 2. 예로 제한 할 수

SELECT o1.order_number, o1.order_date, 
    (SELECT COUNT(*) FROM orders AS o2 
     WHERE o2.order_date <= o1.order_date) AS RowNum 
    FROM 
     orders AS o1 
    ORDER BY o1.order_date 

가되지 않을 수 있으므로,
그러나, 이런 종류의 질의가 읽기 전용 레코드 집합을 반환 할 수 있습니다 (http://groups.google.com/group/microsoft.public.access.queries/msg/ec562cbc51f03b6e?pli=1에서) 보고서 대신 양식에서 동일한 작업을 수행해야하는 경우 충당됩니다. 이 같은 쿼리를 사용하지 않도록하여 하위 보고서에 사용할 수

select 
    Order.ID, 
    Order.Customer_ID, 
    Order.PlacementDate 
from 
    Order 
where 
    Order.ID in 
     (
      select top 2 
       RecentOrder.ID 
      from 
       Order as RecentOrder 
      where 
       RecentOrder.Customer_ID = Order.Customer_ID 
      order by 
       RecentOrder.PlacementDate Desc 
     ) 

:

+0

당신의 솔루션이 효과가 있다고 말할 수는 없지만 보고서에서는 읽기 전용 레코드 세트를 반환하는 것에 대해 걱정할 필요가 없습니다. :) –

+0

D.F. 당신은 절대적으로 옳습니다. 나는 당시 양식에 대해 생각하고있었습니다. – BIBD

+0

CodeSlave : 귀하의 의견을 보내 주셔서 감사합니다. 나는 모든 관련 레코드 (각 유형의 상위 2 개)를 테이블에 넣고 하위 보고서의 레코드 소스로 사용하는 보고서를 열기 전에 해결 방법을 사용했습니다. 그것은 다소 해킹이지만 일을합니다. – pro3carp3

2

아래 샘플 쿼리 (대신 모든 주문의) 각 고객에 대한 가장 최근의 주문 한 쌍을 반환하도록되어 임시 테이블

경고 샘플 :이 샘플 쿼리를 테스트하지 않았으며이 쿼리가 Jet 데이터베이스에 대해 실행되는 보고서에 대해 작동하는지 모릅니다. 데이터를 저장하기 위해 Access를 사용하지 않으며 우리는 전염병 :-). 하지만 SQL Server에 반대해야합니다.

나는 또한 당신의 경우에 그것이 얼마나 잘 수행 될지 모른다. 늘 그렇듯이, 그것은 다릅니다. :-)

BTW, 성능 및 해킹에 대해 말하기. 나는 임시 테이블의 사용을 해킹이라고 생각하지 않을 것이다. 최악의 경우,이 트릭은 보고서에 대한보다 복잡한 인터페이스로 간주 될 수 있습니다. :-) 그리고 이러한 임시 테이블을 사용하는 것은 실제로 성능을 향상시키는 좋은 방법 중 하나 일 수 있습니다. 그러니 서두르지 마세요. :-)

+0

이 대답을 수용해서는 안됩니까? JetEngine과 함께 작동합니다. –

관련 문제