Access 2010 SQL--在交叉表查询中按聚合函数对行进行排序

Posted

技术标签:

【中文标题】Access 2010 SQL--在交叉表查询中按聚合函数对行进行排序【英文标题】:Access 2010 SQL-- Order rows by aggregate function in crosstab query 【发布时间】:2013-11-29 09:16:21 【问题描述】:

我想为我的每个(类别)查看一个SUM(转换支出),并以另一个字段(Media_Type)为中心.下面的代码可以正常工作,除了我添加的 ORDER BY 子句,因为我希望我的输出行按每行的 total 支出排序。

TRANSFORM  Sum([Spending])

SELECT     [Category],
           SUM([Spending])
FROM       [Data]
GROUP BY   [Category]
ORDER BY   SUM([Spending]) DESC

PIVOT      [Media_Type] IN ("TV","Print","Internet")
;

当我添加 ORDER BY 命令时,我收到错误:'不能在 ORDER BY 子句中具有聚合函数'。我该如何解决这个问题并将我的行分组和聚合?

【问题讨论】:

【参考方案1】:

This article 建议您的 SQL 应该可以工作,另一种(但绝不是很好)选项是将您的查询移动到另一个查询的 FROM 部分,例如

SELECT 
    * 
FROM (
    -- Your Query Here (but you'll have to name the SUM column) --
) x 
ORDER BY 
    columnName DESC` 

我猜 Access 在 SQL Server 中没有可用的 OVER 子句,否则可能会被使用。

【讨论】:

问题是交叉表查询。如果 ORDER BY 和聚合函数不在 TRANSFORM 语句中,则它可以工作。此外,除了 Access 不允许您将交叉表查询放入子查询之外,您编写的代码也可以使用。如果我可以调用另一个查询,它会起作用,但出于我的目的,它需要全部在一个查询中!【参考方案2】:
TRANSFORM  Sum([Spending]) 

SELECT [Category], SUM([Spending]) as sum FROM [Data] GROUP BY [Category] ​​ORDER BY sum DESC

PIVOT [Media_Type] IN ("TV","Print","Internet") ;

【讨论】:

以上是关于Access 2010 SQL--在交叉表查询中按聚合函数对行进行排序的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft Access 2010 - 在基于查询的报表中按计算字段过滤

将 Access 交叉表查询转换为 SQL Server

Access和/或SQL中的交叉表查询完成表组合

SQL语言中按月查询

在 AWS Amplify GraphQL DynamoDB 中按另一个表的字段(也称为交叉表或嵌套过滤)过滤列表查询

Access 2010 SQL - 更新查询不起作用