【问题标题】:Access Query Grouping/Sum访问查询分组/总和
【发布时间】:2015-10-29 20:58:45
【问题描述】:

我正在尝试创建每个年龄段的报告/查询。我当前的查询:

SELECT QUE_REP_GENERE_AGEGR.genere, QUE_REP_GENERE_AGEGR.age, Count(*) AS [count] FROM QUE_REP_GENERE_AGEGR
GROUP BY QUE_REP_GENERE_AGEGR.genere, QUE_REP_GENERE_AGEGR.age;

输出如下:(我知道类型拼写错误)

现在想总结年龄组,例如 0-9;10-19;20-29;... (是的,我知道目前只有一个年龄组的记录)

我曾尝试对报告使用分组功能,但没有成功,因为它没有总结类型,而是显示为

...
Drama  1
Horror 2
Horror 5
Musical 1
...

我该如何分组?我需要另一个查询还是可以在当前查询中分组? VBA 是一种选择吗?

【问题讨论】:

  • 您需要定义年龄组,并确定每条记录属于哪个年龄组,然后按年龄组 而不是 age。这纯粹是关于你的数据的形状,我不认为 VBA 可以帮助你。

标签: mysql vba ms-access


【解决方案1】:

我很久没有做过 MS-Access,但正如我评论的那样,你需要有一个“年龄组”的概念某处,并按此分组。

我强烈建议您在表中定义这些组,否则您的查询将不得不定义它们。我认为这样的事情会起作用(也许不是完全,但你明白了):

SELECT
     genere [Genre]
    ,AgeGroup
    ,COUNT(*) [Count]
FROM (
    SELECT
         genere
        ,CASE WHEN age < 10 THEN '0-9'
              WHEN age < 20 THEN '10-19'
              WHEN age < 30 THEN '20-29'
         END AgeGroup
     FROM QUE_REP_GENERE_AGEGR
    )
GROUP BY genere, AgeGroup

【讨论】:

  • 按类别分组,年龄 / 10
  • @BerndBuffen 是否可以这样做,完全取决于组的定义方式。需求也会发生变化 - 有一天,您需要一个团队来 14-18,然后更改所需的工作量取决于您从一开始就构建事物的方式。
  • Bernd Buffens 和我的解决方案当然是快速解决方案,但我喜欢这个解决方案,因为它允许我更具体地定义年龄组。谢谢
  • 刚刚注意到 SELECT CASE 语句不能在 MS Access 中使用!但是类似的switch statement可以用
【解决方案2】:

我找到了一个解决方案:我刚刚做的是向下舍入到最接近的 10,以便 18 转为 10,45 转为 40 ... 这行得通,但仍然对更好的解决方案持开放态度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 2017-12-23
    • 2020-04-06
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多