Поскольку кросс-таблица является особым типом запроса MS Access, он не будет выполнять обычное предложение ORDER BY
. В агрегированном запросе вы можете ссылаться на вычисленный агрегированный столбец в ORDER BY
:
SELECT [dbo_RX Reporting].[Master Drug Name], Sum([dbo_RX Reporting].Price) AS [Total]
FROM [dbo_RX Reporting]
WHERE ((([dbo_RX Reporting].[Therapeutic Class]) Like 'Analg*')
AND (([dbo_RX Reporting].Period) Like '2018*')
AND (([dbo_RX Reporting].[Plan Name])='Alabama'))
GROUP BY [dbo_RX Reporting].[Master Drug Name]
ORDER BY Sum([dbo_RX Reporting].Price) DESC
Для кросс-таблицы вам нужно сохранить исходный запрос и выполнить второй запрос, чтобы вызвать ORDER BY
.
SELECT * FROM myCrosstabQ q ORDER BY q.[Total] DESC
И нет, вы не можете запустить TRANSFORM
в подзапросе как производную таблицу для обработки только одного запроса.
SELECT * FROM (TRANSFORM ...) q ORDER BY q.[Total] DESC
Однако в MS Access SQL допустимо обратное обращение с TRANSFORM
на основе производной от подзапроса таблицы:
TRANSFORM Sum(dt.Price) AS SumOfPrice
SELECT dt.[Master Drug Name], Sum(dt.Price) AS [Total]
FROM (SELECT TOP 5 * FROM [dbo_RX Reporting]) dt
WHERE (((dt.[Therapeutic Class]) Like '*Analg*')
AND ((dt.Period) Like '2018*') AND ((dt.[Plan Name])='Alabama'))
GROUP BY dt.[Master Drug Name]
PIVOT dt.Period;