【问题标题】:Access 2010 SQL-- Order rows by aggregate function in crosstab queryAccess 2010 SQL--在交叉表查询中按聚合函数对行进行排序
【发布时间】: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 子句中具有聚合函数'。我该如何解决这个问题并将我的行分组和聚合?

【问题讨论】:

    标签: sql sql-order-by ms-access-2010 aggregate-functions crosstab


    【解决方案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") ;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 2020-01-26
      • 2010-09-27
      • 2018-02-05
      相关资源
      最近更新 更多