我有一个交叉表查询,我需要按降序对聚合字段进行排序。有没有办法做到这一点?价格是我需要排序的字段。
response.sort(function (a, b) {
return a.aString.localeCompare(b.aString) || a.aNumber - b.aNumber;
});
答案 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;