select sql语句中上一行的增量值列

select sql语句中上一行的增量值列,sql,sql-server,Sql,Sql Server,我必须想办法解决这个问题。。。在这样的表中,我会看到我的列“C”在每行上增加他的值,从一个costant开始,在列“B”中增加值,在同一列“C”中增加值 此外。。。按用户分组 例如:(起点Phil:350,起点Mark:100) 用户点-初始点 菲尔-1000-1350 菲尔-150-1500 菲尔-200-1700 马克-300-400 马克-250-650 我该怎么做 您没有指定DBMS,因此这是ANSI SQL: select "user", point, ca

我必须想办法解决这个问题。。。在这样的表中,我会看到我的列“C”在每行上增加他的值,从一个costant开始,在列“B”中增加值,在同一列“C”中增加值

此外。。。按用户分组

例如:(起点Phil:350,起点Mark:100)

用户点-初始点 菲尔-1000-1350 菲尔-150-1500 菲尔-200-1700 马克-300-400 马克-250-650
我该怎么做

您没有指定DBMS,因此这是ANSI SQL:

select "user",
       point,
       case 
         when "user" = 'Phil' then 350
         else 100
       end + sum(point) over (partition by "user" order by some_date_column) as sum
from the_table
where "user" in ('Mark', 'Phil')
order by "user", some_date_column;

您需要一些列来对行进行排序,否则“运行总和”将是有意义的,因为表中的行没有排序(关系表中没有“第一行”这样的东西)。这就是我的例子中的
some\u date\u列。它可以是一个递增的主键或其他内容,只要它定义了正确的行顺序。

您没有指定DBMS,因此这是ANSI SQL:

select "user",
       point,
       case 
         when "user" = 'Phil' then 350
         else 100
       end + sum(point) over (partition by "user" order by some_date_column) as sum
from the_table
where "user" in ('Mark', 'Phil')
order by "user", some_date_column;

您需要一些列来对行进行排序,否则“运行总和”将是有意义的,因为表中的行没有排序(关系表中没有“第一行”这样的东西)。这就是我的例子中的
some\u date\u列。它可以是一个递增的主键或其他东西,只要它定义了正确的行顺序。

使用窗口。表声明是SQL Server,但如果您的RDBMS支持,则其余的是标准SQL(SQL Server 2012、PostgreSQL 9.1等)


要做到这一点,您需要对表进行排序(我使用了ID)和更好的起始值处理方法(我使用了单独的表)

使用窗口。表声明是SQL Server,但如果您的RDBMS支持,则其余的是标准SQL(SQL Server 2012、PostgreSQL 9.1等)


要做到这一点,您需要对表进行排序(我使用了ID)和更好的起始值处理方法(我使用了一个单独的表)

SQL Server 2008不支持直接使用窗口函数的累积和。可以使用相关子查询获得相同的效果

因此,使用与GBN相同的结构:

DECLARE @t TABLE (ID int IDENTITY(1,1), UserName varchar(100), Point int);

INSERT @t (UserName, Point)
VALUES
('Phil', 1000),
('Phil', 150),
('Phil', 200),
('Mark', 300),
('Mark', 250);

DECLARE @n TABLE (UserName varchar(100), StartPoint int);
INSERT @n (UserName, StartPoint)
VALUES
('Phil', 350),
('Mark', 100);

SELECT
    T.ID, T.UserName, T.Point,
    (N.StartPoint +
     (select SUM(Point) from @t t2 where t2.UserName = t.userName and t2.ID <= t.id)
    )
FROM
    @n N
    JOIN
    @t T ON N.UserName = T.UserName
ORDER BY
    T.ID;
DECLARE@t表(ID int-IDENTITY(1,1),用户名varchar(100),Point int);
插入@t(用户名,点)
价值观
('Phil',1000),
('Phil',150),
('Phil',200),
(‘马克’,300),
(‘马克’,250);
声明@n表(用户名varchar(100),起始点int);
插入@n(用户名,起始点)
价值观
('Phil',350),
(‘马克’,100);
挑选
T.ID、T.UserName、T.Point、,
(N.起点+

(从@t t2中选择SUM(Point),其中t2.UserName=t.UserName和t2.IDSQL Server 2008不支持直接使用窗口函数的累积和。您可以使用相关子查询以获得相同的效果

因此,使用与GBN相同的结构:

DECLARE @t TABLE (ID int IDENTITY(1,1), UserName varchar(100), Point int);

INSERT @t (UserName, Point)
VALUES
('Phil', 1000),
('Phil', 150),
('Phil', 200),
('Mark', 300),
('Mark', 250);

DECLARE @n TABLE (UserName varchar(100), StartPoint int);
INSERT @n (UserName, StartPoint)
VALUES
('Phil', 350),
('Mark', 100);

SELECT
    T.ID, T.UserName, T.Point,
    (N.StartPoint +
     (select SUM(Point) from @t t2 where t2.UserName = t.userName and t2.ID <= t.id)
    )
FROM
    @n N
    JOIN
    @t T ON N.UserName = T.UserName
ORDER BY
    T.ID;
DECLARE@t表(ID int-IDENTITY(1,1),用户名varchar(100),Point int);
插入@t(用户名,点)
价值观
('Phil',1000),
('Phil',150),
('Phil',200),
(‘马克’,300),
(‘马克’,250);
声明@n表(用户名varchar(100),起始点int);
插入@n(用户名,起始点)
价值观
('Phil',350),
(‘马克’,100);
挑选
T.ID、T.UserName、T.Point、,
(N.起点+

(从@t t2中选择SUM(Point),其中t2.UserName=t.UserName和t2.ID您使用的是什么RDBMS Luca?还要将表结构发布到表中您需要一些顺序:请问是什么?起始值从何而来?我使用的是SQLSERVER 2008 R2;我将通过临时表获取起始值,(用户的实际点总和)与我的另一个带有User、Point、Date、Rownumber(部分由用户orderby Date)的temp表一起,您使用的是什么RDBMS?也将表结构发布到表中您需要一些顺序:请问是什么?起始值从何而来?我使用的是SQLSERVER 2008 R2;我将通过temp表获取起始值(用户的实际点总和)与我的另一个临时表一起,带有User、Point、Date、Rownumber(部分按用户orderby Date)窗口函数已在Postgres 8.4中引入,而不是9.1(部分也在SQL Server 2005中)+1…该代码非常有用,即使答案不适用于SQL Server 2008(可能在您发布此内容后添加在注释中).Window函数已经在Postgres 8.4中引入,而不是在9.1中引入(部分在SQL Server 2005中也有)+1…该代码非常有用,即使答案不适用于SQL Server 2008(可能在您发布此代码后添加在注释中)。