从开放日期 SQL 2008 年开始按月计算付款

Calculate payments on a month by month bases from date opened SQL 2008

我目前正在尝试复制一份旧报告,该报告用于生成集合的滚动总和。然而,这不是一个标准的月复一月。这是基于 excel 的报告的屏幕截图。

蓝色部分基于一个简单的查询并给出了用于开始的数据集(EXAMPLE):

SELECT COUNT(AccountNo) AS Number, SUM(Balance) AS Value, DATENAME(MM,DateOpened) AS Month, DATEPART(Y,DateOpened) AS Year FROM tblAccounts
GROUP BY DATENAME(MM,DateOpened), DATEPART(Y,DateOpened)

table非常基础:

AccountNo | Balance | DateOpened
12345     | 1245.55 | 01/01/2015

我正在努力让它滚动计算月份,因此 2011 年 4 月的第 1 个月将是这些文件的第一个月(4 月付款),第 2 个月将是 5 月的付款4 月份开设的账户(我希望这是清楚的)。

所以这意味着 4 月的第 1 个月将是 4 月,而 11 月的第 1 个月将是 11 月。付款存储在 table tblPayments

AccountNo | DatePayment | PaymentValue
12345     | 02/02/2015  | 15.99

我说的不够清楚请问

假设您有一个名为 "DatePayment" 的列,您应该简单地执行如下操作:

SELECT COUNT(AccountNo) AS Number, SUM(Balance) AS Value, 
    DATENAME(MM,DateOpened) AS Month, DATEPART(Y,DateOpened) AS Year,
    DATEDIFF(MONTH, DateOpened, DatePayment) AS MonthN
FROM [...]
GROUP BY DATENAME(MM,DateOpened), DATEPART(Y,DateOpened), 
    DATEDIFF(MONTH, DateOpened, DatePayment)

DATEDIFF 只是计算开户日期和付款日期之间的月份。请注意,您可能希望在 DATEDIFF 计算中将 DateOpened 更改为始终是该月的第一天。

在您查询的 FROM [...] 部分,您需要在您的付款 - table 和持有您账户的 table 之间进行连接,以便能够比较 DateOpenedDatePayment。您应该在 AccountNo 列中加入他们。这看起来像这样:

FROM Accounts INNER JOIN Payments ON Accounts.AccountNo = Payments.AccountNo

完成此操作后,您需要确保对两个 table 中存在的列的所有引用都是完全限定的。这意味着COUNT(AccountNo)应该改为COUNT(Accounts.AccountNo),等等