如何通过在同一查询中创建的字段来订购从查询返回的记录(MS ACCESS)

How to order a recordest returned from a query by a field created within that same query (MS ACCESS)

查询(对于这个问题,我认为您不需要查看架构):

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;

我们如何通过在同一查询中创建的字段对查询返回的记录集进行排序?

我看到函数 FIELDS(INDEX) 了吗?但是这个在access中不存在?也不确定它是否会起作用。在本例中,我想按 MaxInvoice 字段对记录集进行排序。

当我尝试运行此查询

时,MS Access 提示我输入 MaxInvoice 的参数值

你可以写 parent 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;

大多数 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 table 而不是第一个中选择一个字段,这似乎很奇怪。这可能是 NULL.