计算sql行数,将每一行的值添加到下一行

计算sql行数,将每一行的值添加到下一行,sql,sql-server,Sql,Sql Server,我有两个列,我想将每一行的值添加到下一行。 我的表有两列和4行,如下所示: date users 2011-01-01 1 2011-02-02 1 2011-03-02 2 2011-04-02 4 我希望用户如下所示,并将每一行添加到前一行的值中: 用户: 1 2 4 8 MS SQL Server中是否有这样做的功能 谢谢以下是您的方法: set @total_users = 0; select users, @total_u

我有两个列,我想将每一行的值添加到下一行。 我的表有两列和4行,如下所示:

date           users
2011-01-01      1
2011-02-02      1
2011-03-02      2
2011-04-02      4
我希望用户如下所示,并将每一行添加到前一行的值中:

用户:

1
2
4
8
MS SQL Server中是否有这样做的功能


谢谢

以下是您的方法:

set @total_users = 0;
select users, @total_users:=@total_users + users as total_users from tablename;

以下是您如何做到这一点:

set @total_users = 0;
select users, @total_users:=@total_users + users as total_users from tablename;

这是ANSI SQL中的一个解决方案:

SELECT users + lag(users) over (order by users) FROM your_table ORDER BY users
适用于PostgreSQL、Oracle、DB2和Teradata SQL Server的SQL Server确实具有窗口功能,但不幸的是没有滞后功能

这是ANSI SQL中的解决方案:

SELECT users + lag(users) over (order by users) FROM your_table ORDER BY users
在PostgreSQL、Oracle、DB2和Teradata SQL Server中工作的SQL Server确实具有窗口功能,但不幸的是,SQL Server 2005及更高版本中没有滞后功能,您可以使用两个CTE公共表表达式执行类似操作—第一个称为UserSequence的表达式将数据放入一个顺序中,并为其提供一个序列号序列,第二个递归CTE公共表表达式计算运行总数:

;WITH UserSequence AS
(
    SELECT 
        Date, Users, ROW_NUMBER() OVER(ORDER BY Date) as 'Sequence'
    FROM 
        dbo.YourTable
),
UserValues AS
(
  SELECT  
     u.Users AS 'UserValue', u.Date, u.Sequence
  FROM UserSequence u
  WHERE Sequence = 1

  UNION ALL 

  SELECT  
     u.Users + uv.UserValue AS 'UserValue', u.Date, u.Sequence
  FROM UserSequence u
  INNER JOIN UserValues uv ON u.Sequence = uv.Sequence + 1
)
SELECT
    Date, Sequence, UserValue AS 'Users'
FROM 
    UserValues
ORDER BY 
    Sequence
这将为您提供如下输出:

Date                      Sequence    Users
2011-01-01 00:00:00.000       1         1
2011-02-02 00:00:00.000       2         2
2011-03-02 00:00:00.000       3         4
2011-04-02 00:00:00.000       4         8

在SQL Server 2005及更高版本中,您没有指定您拥有的版本,您可以使用两个CTE的公用表表达式执行类似操作—第一个称为UserSequence的表达式用于将数据按顺序排列,并为其提供一个序列号序列,第二个递归CTE公用表表达式用于计算运行总数:

;WITH UserSequence AS
(
    SELECT 
        Date, Users, ROW_NUMBER() OVER(ORDER BY Date) as 'Sequence'
    FROM 
        dbo.YourTable
),
UserValues AS
(
  SELECT  
     u.Users AS 'UserValue', u.Date, u.Sequence
  FROM UserSequence u
  WHERE Sequence = 1

  UNION ALL 

  SELECT  
     u.Users + uv.UserValue AS 'UserValue', u.Date, u.Sequence
  FROM UserSequence u
  INNER JOIN UserValues uv ON u.Sequence = uv.Sequence + 1
)
SELECT
    Date, Sequence, UserValue AS 'Users'
FROM 
    UserValues
ORDER BY 
    Sequence
这将为您提供如下输出:

Date                      Sequence    Users
2011-01-01 00:00:00.000       1         1
2011-02-02 00:00:00.000       2         2
2011-03-02 00:00:00.000       3         4
2011-04-02 00:00:00.000       4         8

这可以通过交叉连接实现。如果您的表列是按Asc顺序排列的

select <T1.Text>,sum(T2.Value) AS 'Commulative Value' from <Your Table name>t1 
cross JOIN <Your Table name> t2 where t2.value<= t1.value
group BY t1.text
order by value

这可以通过交叉连接实现。如果您的表列是按Asc顺序排列的

select <T1.Text>,sum(T2.Value) AS 'Commulative Value' from <Your Table name>t1 
cross JOIN <Your Table name> t2 where t2.value<= t1.value
group BY t1.text
order by value

这不是有效的SQL。这是用于什么数据库系统的?SQL Server中有一种类似的未记录且不保证的技术,称为quirky updatemy project位于microsoft SQL上。这是无效的SQL。这是用于什么数据库系统?SQL Server中有一种类似的未记录且不保证的技术,称为quirky updatemy project位于microsoft SQL上抱歉,是的,我应该使用代码标记来完成。抱歉,是的,我应该使用代码标记来完成。我的项目位于microsoft SQL上。我更新了标记,并将此问题包括在内信息我的项目在microsoft sqlI上更新了标记和问题以包含此基本信息