为日期范围按月返回多个总和
Posted
技术标签:
【中文标题】为日期范围按月返回多个总和【英文标题】:Return Multiple Sums By Moth For Date Range 【发布时间】:2018-01-19 17:09:46 【问题描述】:我已经看到了这个问题的多个版本,但没有针对我的具体问题的解决方案。我有两张桌子。其中一个有 2 个数字要总结。桌子之间没有限制。我想要一个结果集,在给定的日期范围内按月返回每个表的总和。例如:
月 Total_Collections Total_Expenses
我已附上表格的架构:
【问题讨论】:
【参考方案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
【讨论】:
你也可以使用EXTRACT
和YEAR_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
【讨论】:
以上是关于为日期范围按月返回多个总和的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 where 和 Group by 返回多个总和结果