SQL Server:如何将列值分别汇总到下一列

时间:2015-03-12 15:10:23

标签: sql-server-2008

我有下表...

code    date           amount        balamt
   -------------------------------------
1    2015—03—01         10            
1    2015—03—02         15
1    2015—03—03         20
1    2015—03—04         12
2    2015—03—05         15 
2    2015—03—01         10            
2    2015—03—02         20
2    2015—03—03         10              

我想得到这样的结果......

code    date           amount        balamt
     -------------------------------------
1    2015—03—01         10               10
1    2015—03—02         15               25
1    2015—03—03         20               45
1    2015—03—04         12               57
2    2015—03—05         15               15
2    2015—03—01         10               25
2    2015—03—02         20               45
2    2015—03—03         10               55

我还想要代码组明智的数据

2 个答案:

答案 0 :(得分:1)

你可能想尝试这样的事情(这没有经过语法检查,应该被视为更多的伪代码指南,而不是明确的答案):

SELECT
   t1.DateColumnName
   , t1.AmountColumnName
   , SUM(t2.AmountColumnName)
FROM
   TableName t1
   LEFT JOIN TableName t2 ON t2.DateColumnName <= t1.DateColumnName
GROUP BY
   t1.DateColumnName
   , t1.AmountColumnName

潜在有用的文章:

答案 1 :(得分:0)

可以使用CROSS JOINSUM来完成此操作。试试这样的事情,

declare @table table(date date, amt decimal(18,2))
insert into @table
values
('2015-03-01', 10),
('2015-03-02', 15),
('2015-03-03', 20),
('2015-03-04', 12),
('2015-03-05', 10)


SELECT t.date, t.amt, SUM(t1.amt) as balamt
FROM @table t 
CROSS JOIN
@table t1
WHERE t1.date <= t.date
GROUP BY t.date, t.amt
ORDER BY balamt

Sql Fiddle Demo

有关计算上一行值之和的更多信息,请参阅Code Project中的这篇文章。