从开放日期 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 之间进行连接,以便能够比较 DateOpened
与 DatePayment
。您应该在 AccountNo 列中加入他们。这看起来像这样:
FROM Accounts INNER JOIN Payments ON Accounts.AccountNo = Payments.AccountNo
完成此操作后,您需要确保对两个 table 中存在的列的所有引用都是完全限定的。这意味着COUNT(AccountNo)
应该改为COUNT(Accounts.AccountNo)
,等等
我目前正在尝试复制一份旧报告,该报告用于生成集合的滚动总和。然而,这不是一个标准的月复一月。这是基于 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 之间进行连接,以便能够比较 DateOpened
与 DatePayment
。您应该在 AccountNo 列中加入他们。这看起来像这样:
FROM Accounts INNER JOIN Payments ON Accounts.AccountNo = Payments.AccountNo
完成此操作后,您需要确保对两个 table 中存在的列的所有引用都是完全限定的。这意味着COUNT(AccountNo)
应该改为COUNT(Accounts.AccountNo)
,等等