Ваше предложение ORDER BY
является допустимым синтаксисом SQL-92.
К сожалению, ядро базы данных Access не совместимо с SQL-92. Он не позволяет использовать корреляционное имя столбца («псевдоним») из предложения SELECT
. Если вы использовали это:
SUM(Price * Qty) AS total_price
...
ORDER BY total_price
вы бы получили ошибку. (Кроме того, вы все равно должны подумать о том, чтобы дать этому выражению корреляционное имя столбца.)
Вместо имен корреляции механизм данных Access ожидает либо имя столбца, либо выражение (последнее недопустимо в SQL-92); указанные столбцы не обязательно должны присутствовать в предложении SELECT
(опять-таки недопустимо в SQL-92). Поскольку можно использовать любой столбец из любой таблицы в предложении FROM
, вам необходимо устранить неоднозначность с именем таблицы; если вы использовали имя корреляции таблиц в предложении FROM
, то вы должны использовать его в предложении ORDER BY
(я не делаю правила!)
Чтобы удовлетворить требования ядра СУБД Access, я думаю, вам нужно изменить предложение ORDER BY на следующее:
ORDER BY Last DESC, OrderLine.OrdID DESC;
Кроме того, я думаю, что ваш код будет более читабельным, если вы укажете столбцы с именами таблиц в своем предложении SELECT
, даже если они недвусмысленны в контексте (я считаю, что использование полных имен таблиц немного многословно и я предпочитаю короткие таблицы) корреляционные имена, указанные в словаре данных и используемые последовательно во всех запросах). В его нынешнем виде я могу только догадываться, что OrdDate
от Orders
, а Price
и Qty
от OrderLine
. Я не знаю, что представляет Last
.