【问题标题】:Year-To-Date Summary by Month in Access SQLAccess SQL 中按月份的年初至今摘要
【发布时间】:2013-06-10 13:42:27
【问题描述】:

鉴于此表,我需要按月生成年初至今的摘要。结果应该有一年中每个月的一行,以及截至该月的一年的运行总计。当谈到 SQL 时,我绝不是新手,但我仍然不知道如何在纯 SQL 中实现这一点。有谁知道如何做到这一点?请注意,它需要与 Microsoft Access SQL 兼容。

projectTitle  | completionDate | amount
---------------------------------------
'Project #1'  | 2013-01-12     | 1234
'Project #2'  | 2013-01-25     | 4567
'Project #3'  | 2013-02-08     | 8901
'Project #4'  | 2013-02-15     | 2345
'Project #5'  | 2013-02-20     | 6789
'Project #6'  | 2013-03-01     | 1234
'Project #7'  | 2013-04-12     | 5678
'Project #8'  | 2013-05-06     | 9012
'Project #9'  | 2013-05-20     | 3456
'Project #10' | 2013-06-18     | 7890
'Project #11' | 2013-08-10     | 1234

预期结果示例

month    | amount
-----------------
'Jan-13' | 5801          -- = Project #1 + Project #2 + Project #3
'Feb-13' | 23836         -- = Project #1 + Project #2 + Project #3 + Project #4 + Project #5
'Mar-13' | 25070         -- ...and so on
'Apr-13' | 30748         
'May-13' | 43216         
'Jun-13' | 51106
'Jul-13' | 51106          
'Aug-13' | 52340

在我的示例输出中,您可能会注意到我包含了 7 月,即使示例表没有 7 月的任何数据。理想情况下,输出仍将包括您在示例输出中看到的 7 月,但如有必要,我可以不用。

【问题讨论】:

    标签: sql ms-access ms-access-2010


    【解决方案1】:

    我通过使用子查询并为表名使用别名找到了答案。

    SELECT FORMAT(t1.completionDate,"mmm-yy") AS [month], (
            SELECT SUM(t2.amount)
            FROM projects AS t2
            WHERE MONTH(t2.completionDate) <= MONTH(t1.completionDate)
        ) AS [amount]
    FROM projects AS t1;
    

    【讨论】:

      【解决方案2】:

      我认为,尝试按月份对其进行分组可能会有所帮助。查看here 以了解如何按月份对其进行分组。 然后您应该能够按月份汇总金额。

      希望这个想法对你有所帮助。

      萨拉乔格

      【讨论】:

      • 对不起,但这没有帮助。我已经可以按月对它进行分组,但问题是每个月都将之前的所有月份都包括在总数中。
      • 您想要一个每月返回的 sql 查询来获取当月完成的所有项目的总数,或者您到底想要什么?
      • 我认为我不能比我在问题中更好地解释它。但是,当查询运行时,它应该每个月都有一行,直到当年的当前月份。每行的金额列应该是当年截至该行月份的所有项目的总和。
      • 我认为这会对你有所帮助:link
      【解决方案3】:
      Select Month(CompletionDate) as MthComplete, Year(CompletionDate) as YrComplete, AMT as Sum(Amount)
      From MyTable
      Group By Year(CompletionDate), Month(CompletionDate)
      Order By Year(CompletionDate), Month(CompletionDate)
      

      您可能需要使用另一列来获取您在输出示例中使用的年/月格式,但这会按照您想要的方式对数据进行分组。

      【讨论】:

      • 不幸的是,这不是我想要的。输出的每一行不应该只是那个月的总和,还应该是前几个月的总和。
      猜你喜欢
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 2020-01-19
      • 2013-10-05
      • 1970-01-01
      相关资源
      最近更新 更多