【问题标题】:Access 2010 SQL select top with an additional fieldAccess 2010 SQL 选择顶部带有附加字段
【发布时间】:2013-11-25 16:03:54
【问题描述】:

这为我提供了支出排名前 5 的类别/年份组合:

SELECT TOP 3 [Category],
             SUM([Spending]),
             Year
FROM Data
GROUP BY [Category], [Year]
;

我想看看每年的总体前 5 个类别。

例如如果 3 年期间的最高支出类别是 A、B、C(但不是 D),我想输出以下内容:

  Category   Total Spending   Year
  A          123              1  
  A          321              2
  A          987              3
  B          798              1
  B          465              2 
  B          153              3
  C          654              1
  C          486              2
  C          759              3

这里解决了,但只有两个字段-SQL: Select Top 3 Records + Sum of Quantity

【问题讨论】:

  • 您想在 3 年内每年选择前 5 个类别吗?
  • 不,我想要整个 3 年期间的前 5 个类别,每年都紧随其后。因此,如果某个类别在一年内不是前三名,但总体上是前三名,我仍然希望每年都能看到它。 ---但是说实话,知道如何做你提到的对我也有帮助。
  • 好的,我把我的问题放在答案中,告诉我它是否符合你的要求。

标签: sql select subquery grouping ms-access-2010


【解决方案1】:

这样试试:

SELECT [Category], SUM([Spending]) as TotalSpending, Year
FROM Data
WHERE Year IN (SELECT TOP 5 Year FROM Data ORDER BY Year DESC)
GROUP BY [Category], [Year]
ORDER BY SUM([Spending])  DESC, [Year] DESC

【讨论】:

  • 当我完全使用此代码时,系统会要求我为 TotalSpending 输入参数值。如果我单击取消,或者使用没有 TotalSpending 的代码,我会在输出中总共获得 5 条记录。就我的数据而言,它们都是最近一年的,即 2013 年。我想在我的数据中看到这些类别每年的这些支出总额。因此,由于我的数据可以追溯到 2007 年,因此应该有 7 年 * 5 个类别 = 35 条记录
  • 我更改了查询,导致 order by 子句中的 MS ACCESS 出错。试试这个。
  • 在 Access 中,这显示了与我上面的第一个代码相同的结果 - 前五年/类别组合。同样仍然只有 5 条记录,而不是 35 条。
  • 我用 where 子句修改了查询,将数据限制为最近 3 年
  • 这不会在我的 Access 2010 版本中运行,处理需要一个多小时。你试过了吗?另外,这不会显示过去三年的所有类别吗?
猜你喜欢
  • 2023-04-07
  • 2018-12-08
  • 2011-06-03
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 2018-07-30
相关资源
最近更新 更多