通过Moth返回多个总和的日期范围

时间:2018-01-19 17:09:47

标签: sql date sum range monthcalendar

我已经看到了这个问题的几个版本,但没有解决我的具体问题。我有两张桌子。其中一个有两个数字来总结。表格之间没有任何限制。我想要一个结果集,它为给定的日期范围按月返回每个表的总和。例如:

月份Total_Collections Total_Expenses

我已附上表格的架构:

enter image description here

enter image description here

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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