Использование верхнего предложения в подотчете Access - PullRequest
2 голосов
/ 08 октября 2008

Я делаю отчет в Access 2003, который содержит подотчет связанных записей. В рамках подотчета я хочу только две верхние записи. Когда я добавляю «TOP 2» к запросу подотчета, кажется, что он выбирает две верхние записи перед тем, как фильтровать по полям ссылки. Как получить две верхние записи только тех записей, которые относятся к соответствующему полю ссылки? Спасибо.

Ответы [ 2 ]

2 голосов
/ 03 ноября 2008

Предполагается, что приведенный ниже пример запроса возвращает пару самых последних заказов для каждого клиента (вместо всех заказов):

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
        )

Такой запрос можно использовать в вашем подотчете, чтобы избежать использования временной таблицы.

CAVEAT EMPTOR: я не тестировал этот пример запроса, и я не знаю, будет ли этот запрос работать для отчета, работающего с базой данных Jet (мы не используем Access для хранения данных и избегаем отчетов Access, таких как чума: -). Но это должно против SQL Server.

Я также не знаю, насколько хорошо это будет работать в вашем случае. Как обычно, это зависит. : -)

Кстати, говоря о производительности и взломах. Я бы не считал использование временной таблицы взломом. В худшем случае этот трюк можно рассматривать как более сложный, чем необходимый, интерфейс к отчету. :-) И использование такой временной таблицы на самом деле может быть одним из хороших способов улучшить производительность. Так что не спешите списывать это со счетов. : -)

1 голос
/ 08 октября 2008

У меня есть два предложения:
1) Передайте ваше главное поле (в родительской форме) в запрос в качестве параметра (вы также можете напрямую ссылаться на поле в родительской форме)
2) Вы можете подделать круглые номера в Access и ограничить их только rownum <= 2. Например, </p>

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)
Однако этот тип запроса может возвращать набор записей только для чтения, поэтому он может не быть назначен, если вам нужно сделать то же самое в форме вместо отчета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...