сортировать агрегированное поле в кросс-таблице SQL - PullRequest
0 голосов
/ 31 августа 2018

У меня кросс-таблица, и мне нужно отсортировать агрегированное поле в порядке убывания. Есть ли способ сделать это? Цена - это поле, которое мне нужно отсортировать.

TRANSFORM Sum([dbo_RX Reporting].Price) AS SumOfPrice
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]
PIVOT [dbo_RX Reporting].Period;


Master Drug Name           Total    201804       201805       201806    201807
ACETAMINOPHEN           $1,311.72   $335.27     $330.92     $286.47     $359.06 
ACETAMINOPHEN/CODEINE   $2,399.87   $891.89     $543.60     $658.08     $306.30 
ALLOPURINOL               $976.27   $215.98     $234.16     $263.96     $262.17 
Amrix                   $1,065.14             $1,065.14         
APAP                    $1,526.08   $415.34     $524.56     $297.04     $289.14 

1 Ответ

0 голосов
/ 31 августа 2018

Поскольку кросс-таблица является особым типом запроса 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...