Sql 基于数据列的运行总计
我有一张临时表,上面有一个账户每天余额变化的结果Sql 基于数据列的运行总计,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我有一张临时表,上面有一个账户每天余额变化的结果 DateValue DailyAmount ---------- --------------------------------------- 2014-04-21 0.00 2014-04-22 606.28 2014-04-23 -70.00 2014-04-24 -86.96 2014-04-25 -101.01 2014-04-26 -27.00 2014-04-27 0.00 2014-04-28 -75.00 2014-04-29
DateValue DailyAmount
---------- ---------------------------------------
2014-04-21 0.00
2014-04-22 606.28
2014-04-23 -70.00
2014-04-24 -86.96
2014-04-25 -101.01
2014-04-26 -27.00
2014-04-27 0.00
2014-04-28 -75.00
2014-04-29 -12.00
2014-04-30 0.00
2014-05-01 -164.00
2014-05-02 -49.95
2014-05-03 0.00
2014-05-04 0.00
2014-05-05 -140.00
2014-05-06 538.23
2014-05-07 -70.00
2014-05-08 223.04
2014-05-09 0.00
2014-05-10 -50.00
2014-05-11 0.00
2014-05-12 -140.00
2014-05-13 -12.00
2014-05-14 0.00
2014-05-15 6179.81
我需要从这个表中选择,根据我拥有的期初余额变量添加一个运行余额
选择DateaddDAY,-1,Datefield并以某种方式连接到其自身安全吗
我失败的尝试错误的结果是:
SELECT DateValue, ISNULL(r.Amount,0) AS DailyAmount, SUM(ISNULL(r.Amount,0))
FROM calendar c
LEFT JOIN @Result r
ON r.TheDate = c.DateValue
LEFT JOIN @Result r2
ON r2.TheDate = DATEADD(day, -1, r.TheDate)
WHERE c.DateValue BETWEEN @Start AND @End
GROUP BY c.DateValue, r.Amount
SQL版本是Microsoft SQL Server 2008 R2 SP2在SQL中获取运行总计的典型方法是使用相关子查询:
select r.*,
(select sum(r2.DailyAmount)
from @Result r2
where r2.DateValue <= r.DateValue
) as CumSum
from @Result r;
您可能需要在子查询中添加其他条件,例如匹配客户。而且,SQL Server 2012直接支持累计总和。对在上运行总计的不同策略进行了相当广泛的讨论 如果您只有每日条目,那么几乎任何解决方案都可以,因为性能不会成为问题。我会展示一些不同的东西,然后戈登只是为了它
;WITH x AS
(
SELECT TOP 1
DateValue
,DailyAmount
,RunningTotal = DailyAmount
FROM #Result
ORDER BY DateValue ASC
UNION ALL
SELECT y.DateValue
,y.DailyAmount
,x.RunningTotal + y.DailyAmount
FROM x
INNER JOIN
#Result y ON y.DateValue = DATEADD(DAY, 1, x.DateValue)
)
SELECT DateValue
,DailyAmount
,RunningTotal
FROM x
ORDER BY DateValue
OPTION (MAXRECURSION 10000)
您的SQL Server版本是什么?请通过添加您尝试的代码或期望的结果来澄清您的特定问题。正如目前所写的,很难准确地说出你在问什么。请参阅“如何寻求帮助”页面以澄清此问题。可能与此问题重复:哈姆雷特-这是2008 R2。@Craig。同时显示所提供数据的预期结果。完美!谢谢戈登,好的。它被称为相关子查询。Link-Gordon我检查过,如果日期不是按升序排列的,这个查询将不起作用。在这种情况下,有没有办法使您的查询仍然有效?您的@Result=我的销售表。我的查询创建表SALL[DateValue][datetime]NULL[DailyAmount][decimal]18,2 NULL插入销售订单中的销售选择前10*按DailyAmount描述选择*从销售选择r*,从销售r2中选择sumr2.DailyAmount,其中r2.DateValue@BoratSagdiyev。这应该与特定顺序中的日期无关。条件r2.DateValue@GordonLinoff-我发誓我看到了一些奇怪的输出。我找个时间拉小提琴,再检查一下。