2015-12-18 4 views
2
SELECT * 
FROM data WHERE (object,TCH_Traffic) IN 
(SELECT object, MAX(TCH_Traffic) 
    FROM data 
    GROUP BY object 
) 

Может ли этот запрос быть изменен для работы с базой данных MS Access. Я получаю ошибку, чтобы «пересмотреть приглашение выбора», как указано в MS access 2010 db.Преобразование запроса SQl в MS Access

enter image description here

+0

Попытка:. 'Select d * из данных d Join (Выбор объекта, MAX (TCH_Traffic) А.С. TCH_Traffic FROM data GROUP BY object) AS s ON d.object = s.object И d.TCH_Traffic = s.TCH_Traffic' – lad2025

ответ

0

Просто используйте связанный подзапрос:

SELECT * 
FROM data 
WHERE TCH_Traffic = (SELECT MAX(d2.TCH_Traffic) 
        FROM data as d2 
        WHERE d2.object = data.object 
        ); 
+0

Спасибо большое Гордон. Ваше решение работает так, как мне нужно. – Aprilian8

0

по умолчанию MS Access' Jet/ACE SQL Engine может обрабатывать подзапрос в WHERE состоянии, используя IN положение. Однако подзапрос должен возвращать одно значение столбца. Рассмотрим следующую настройку:

SELECT * 
FROM data WHERE (object) IN 
    (SELECT object 
    FROM data 
    GROUP BY object 
    HAVING TCH_Traffic = MAX(TCH_Traffic) 
    ); 

Однако, вы можете просто использовать производную таблицу с INNER JOIN и избежать WHERE дизъюнкцию подзапрос. Кроме того, та же производная таблица запрос может быть сохранен в виде сохраненного объекта запроса в MS Access и явно ссылаются в присоединиться пункт:

SELECT * 
FROM data  
INNER JOIN 
    (SELECT object, MAX(TCH_Traffic) As maxTraffic 
    FROM data 
    GROUP BY object 
    ) As dT  
ON data.object = dT.object 
AND data.TCH_Traffic = dt.maxTraffic 
Смежные вопросы