交叉表查询SQL中的排序聚合的字段

时间:2018-08-31 15:35:04

标签: sql ms-access

我有一个交叉表查询,我需要按降序对聚合字段进行排序。有没有办法做到这一点?价格是我需要排序的字段。

response.sort(function (a, b) {
    return a.aString.localeCompare(b.aString) || a.aNumber - b.aNumber;
});

1 个答案:

答案 0 :(得分:0)

由于交叉表查询是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

但是,与基于子查询派生表的TRANSFORM进行相反的操作在MS Access SQL中有效:

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;