Как заказать запись, возвращаемую из запроса, по полю, созданному в этом же запросе (MS ACCESS) - PullRequest
0 голосов
/ 21 мая 2019

Запрос (Для этого вопроса я не думаю, что вам нужно видеть схему):

SELECT Agencies.AgencyName, (SELECT DISTINCT MAX(Invoices.CostsTotal) FROM Invoices WHERE Contracts.ContractID = Invoices.ContractID) AS MaxInvoice
FROM Contracts 
LEFT JOIN Agencies ON Contracts.AgencyID = Agencies.AgencyID
ORDER BY MaxInvoice DESC;

Как упорядочить набор записей, возвращаемый из запроса, полем, созданным в этом же запросе?

Я видел функцию ПОЛЯ (ИНДЕКС)?Но это не существует в доступе?Также не уверен, что это будет даже работать.В этом случае я хочу отсортировать набор записей по полю MaxInvoice.

MS Access предлагает ввести значение параметра для MaxInvoice, когда я пытаюсь выполнить этот запрос

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

Большинство диалектов SQL поддерживают использование псевдонимов в ORDER BY.Но MS Access дальше от стандартов SQL, чем большинство баз данных.

Я бы предложил переписать запрос, чтобы переместить Invoices в предложение FROM - используя агрегацию, чтобы получить то, что вы хотите:

SELECT a.AgencyName, MAX(i.CostsTotal) AS MaxInvoice
FROM (Contracts as c LEFT JOIN
     Agencies as a 
     ON c.AgencyID = a.AgencyID) LEFT JOIN
     Invoices as i
     ON i.ContractID = c.ContractID
GROUP BY a.AgencyName
ORDER BY MAX(i.CostsTotal) DESC;

Кажется странным, что вы используетеLEFT JOIN и выбор поля из таблицы second , а не из первого.Это может быть NULL.

2 голосов
/ 21 мая 2019

Вы можете написать родительский SELECT , который обернет ваш текущий SELECT. Как это:

SELECT * FROM (
 SELECT Agencies.AgencyName, 
 (SELECT DISTINCT MAX(Invoices.CostsTotal) FROM Invoices 
 WHERE Contracts.ContractID = Invoices.ContractID) AS MaxInvoice
 FROM Contracts LEFT JOIN Agencies 
 ON Contracts.AgencyID = Agencies.AgencyID
) AS ContractsLargestInvoice
ORDER BY ContractsLargestInvoice.MaxInvoice DESC;
...