TSQL运行总计根据前几行的总和进行聚合

TSQL运行总计根据前几行的总和进行聚合,sql,sum,aggregate-functions,rows,Sql,Sum,Aggregate Functions,Rows,我不知道该怎么说。比如说我有一个选择 Name, month, amount John, June, 5 John, July,6 John, July, 3 John August, 10 我要汇总并报告每个月的Begging blance 姓名、月份、余额 john, may, 0 john, june, 0 john, july, 5 john, august, 14 john, September, 24 我可以在excel中使用单元格公式实现这一点,但如何在SQL中实现这一点而不将

我不知道该怎么说。比如说我有一个选择

Name, month, amount
John, June, 5
John, July,6
John, July, 3
John August, 10
我要汇总并报告每个月的Begging blance

姓名、月份、余额

john, may, 0
john, june, 0
john, july, 5
john, august, 14
john, September, 24
我可以在excel中使用单元格公式实现这一点,但如何在SQL中实现这一点而不将值存储在某处呢?我有另一个带有财政月份的表,我可以使用它进行左外部联接,因此所有月份都会被报告,只是不确定如何在sql中从以前的月份进行聚合。

使用这样的分组

SELECT NAME, MONTH , SUM(Balance) FROM table GROUP BY NAME, MONTH
这并不像窗口功能那么好,但由于它们因数据库而异,您需要告诉我们您使用的是哪个系统


它是一个内联子查询,性能不太好。但至少很容易理解发生了什么

假设您的月份表示为日期,这将为您提供运行总数

select t1.name, t1.month, sum(t2.amount)
from yourtable t1
left join yourtable t2 
     on t1.name = t2.name
     and t1.month>t2.month
group by t1.name, t1.month

您正在使用什么rdbms?sql server,mysql?对不起,是TSQL sql server。已更新。SQL Server的哪个版本?这一点非常重要,因为2012年有2008年没有的功能,2008年有2005年没有的功能。或者是它的紧凑版?您选择的半cartessian产品答案效率很低,因为答案中所述的数据量在增长。但是要知道最好的选择需要知道你有什么选择;它包括了解您实际使用的SQL Server版本。OP需要上个月的数据总和谢谢。我们需要测试一下。从第一次开始就把你作为答案。我不想使问题复杂化,但如果业务复杂,该怎么办?例如,我想增加上个月的百分比,该百分比取决于John截至上个月在公司的服务年限。我可以在函数内联中这样做吗?是的,可以这样做,但是由于内联SQL是针对每一行执行的,因此很快就会变得难以读取并且速度变慢。然后,我将研究Sql Server中的联接或秩和OVER函数。有关更多信息,请参阅。问题并不在于这是一个内联函数,SQL Server在生成查询计划时非常擅长扩展这些函数。问题是,它是一个半卡特尔产品。随后的每一行都连接到前面的所有行。这意味着总共超过100行实际正在处理1+2+..+100行数据,总共5050行。。。SQL Server的更高版本允许@davek使用OVER子句,这会显著加剧此问题。
select t1.name, t1.month, sum(t2.amount)
from yourtable t1
left join yourtable t2 
     on t1.name = t2.name
     and t1.month>t2.month
group by t1.name, t1.month