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 - 在基于查询的报表中按计算字段过滤