【问题标题】:Return Multiple Sums By Moth For Date Range为日期范围按月返回多个总和
【发布时间】:2018-01-19 17:09:46
【问题描述】:

我已经看到了这个问题的多个版本,但没有针对我的具体问题的解决方案。我有两张桌子。其中一个有 2 个数字要总结。桌子之间没有限制。我想要一个结果集,在给定的日期范围内按月返回每个表的总和。例如:

月 Total_Collections Total_Expenses

我已附上表格的架构:

【问题讨论】:

    标签: sql date sum range monthcalendar


    【解决方案1】:

    据我了解您的问题,此解决方案应该可以满足您的期望, 我的解决方案在Oracle 进行了测试:

    它返回给定 YEAR-MONTH 键的计数:

    SELECT exp.Month , exp.ExpenseCount , coll.CollectionCount 
    FROM 
    (SELECT  
        TO_CHAR(ExpenseDate, 'YYYY-MM') as Month,
        COUNT(1) as ExpenseCount 
        FROM Expenses 
        GROUP BY TO_CHAR(ExpenseDate, 'YYYY-MM')
    ) exp ,
    (SELECT  
        TO_CHAR(CollectionDate, 'YYYY-MM') as Month,
        COUNT(1) as  CollectionCount
        FROM Collection  
        GROUP BY TO_CHAR(CollectionDate, 'YYYY-MM')
    ) coll 
    WHERE exp.Month = coll.Month ;
    

    示例输出:

    MONTH     | EXPENSECOUNT | COLLECTIONCOUNT 
    2017-11           1              1 
    2017-12           2              3
    

    【讨论】:

    • 你也可以使用EXTRACTYEAR_MONTH 都取决于你需要什么样的时间范围。
    • 你能给我一个使用“Extract”的例子吗?我遇到了“To_Char”函数的问题,因为我使用的是 Microsoft SQL Server。
    • 大家好。我将上面的代码标记为正确,因为它对提出我发布的解决方案非常有帮助。
    【解决方案2】:
    SELECT exp.Month , exp.ExpenseCount , coll.CollectionCount 
    FROM 
    (SELECT  
        Convert(VARCHAR(6), Expenses.ExpenseDate, 112) as Month,
        SUM(Expenses.ExpenseAmount) as ExpenseCount 
        FROM Expenses 
        GROUP BY Convert(VARCHAR(6),Expenses.ExpenseDate, 112)
    ) exp ,
    (SELECT  
        Convert(VARCHAR(6),Collection.CollectionDate, 112) as Month,
        SUM(Collection.CashAmount) as  CollectionCount
        FROM Collection  
        GROUP BY Convert(VARCHAR(6),Collection.CollectionDate, 112)
    ) coll 
    WHERE exp.Month = coll.Month 
    

    【讨论】:

      猜你喜欢
      • 2020-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      • 2017-04-17
      • 1970-01-01
      • 1970-01-01
      • 2022-10-01
      相关资源
      最近更新 更多