65.9K
CodeProject 正在变化。 阅读更多。
Home

SqlServer 中上一行的值之和

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.50/5 (3投票s)

2009年6月20日

CPOL
viewsIcon

54333

SqlServer 中上一行的值之和


引言

我需要编写一个查询,将一列的当前行值与前一行值的总和相加。为此,我经过长时间的谷歌搜索后写了一个查询。在这里我尝试向您展示我所做的事情。

先决条件

SQL Server 2005

描述

我有一个包含三个字段的表:Id、Name 和 Mark。所有字段的值如下所示。

Id       Name   Mark
---    -----    -----
1    aaaa    10
2    bbbb    20
3    cccc    30

现在我想要得到该表的结果集,如下所示:

Id       Name   Mark
---    -----    -----
1    aaaa    10
2    bbbb    30
3    cccc    60

因此,我需要一个单独的 SELECT 查询来以高性能完成此操作。为此,我使用 CROSS JOIN 编写了一个查询。

实施

为了获取上述结果集,我使用 CROSS JOIN 编写了以下代码。只需使用以下代码片段即可获得前几行总和的结果集。
 

select a.Id, a.Name, sum(b.Mark) as Mark
from Marks a cross join Marks b
where b.Id <= a.Id
group by a.Id, a.Name 

表和查询的代码片段

表名:Marks
 

CREATE TABLE [dbo].[Marks](
	[Id] [bigint] NOT NULL,
	[Name] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
	[Mark] [bigint] NOT NULL
) ON [PRIMARY]
select * from Marks

mark1.JPG 

select a.Id, a.Name, sum(b.Mark) as Mark
from Marks a cross join Marks b
where b.Id <= a.Id
group by a.Id, a.Name

mark2.JPG 

结论 

因此,我们完成了在 sql server 中获取前几行总和的结果集。

© . All rights reserved.