Sql 使用和函数

Sql 使用和函数,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有以下结构的表: TestTable ID INT,LoanID INT,Amount INT ID LoanID Amount 1 1 20 2 1 30 3 1 15 4 2 40 5 2 20 6 3 50 我想用这个场景计算贷款金额 ID LoanID Amount Sum 1 1 20 20 2 1 30 50 3

我有以下结构的表:

TestTable ID INT,LoanID INT,Amount INT

ID  LoanID  Amount
1   1        20
2   1        30
3   1        15
4   2        40
5   2        20
6   3        50
我想用这个场景计算贷款金额

ID  LoanID  Amount  Sum
1   1       20      20
2   1       30      50
3   1       15      65
4   2       40      40
5   2       20      60
6   3       50      50

获取此总和的最佳方法是什么?当然,没有光标:

不幸的是,SQL Server 2008没有执行累积总和的干净函数,因此您需要使用相同的LoadID将前面的所有行相加:


您可以使用相关子查询来获取:


通过使用窗口功能:

select *, sum(amount) over (partition by loanid order by id) as "sum" from testtable;
SQL server 2012:

SQL server 2008:

它可以在SQL server 2012上运行,但不能在使用SQLFIDLE的SQL server 2008上运行。

试试这个

  SELECT b.id,a.LoanID,b.Amount,
           Sum(a.Amount) AS [Sum]
    FROM   #temp_table a
    JOIN   #temp_table b ON a.id <= b.id
                  AND a.LoanID = b.LoanID
    GROUP  BY b.id,a.LoanID,b.Amount

这不是累计和,看看OP输出,Id 4的和为40,Id 3的和为4065@RADAR这是每个贷款组的累计值。@D Stanley,您的查询结果是良好的+1
SELECT t.ID, t.LoanID, t.Amount,
       [Sum] = (SELECT SUM(AMOUNT)
                FROM TestTable t2
                WHERE t.LoanID=t2.LoanID
                AND t2.ID <= t.ID)
FROM TestTable t
select ID, LoanID, Amount, 
       (select sum(Amount)
        from TestTable A
        where  A.LoanID = B.LoanID and
               A.ID <= B.ID
       ) as Sum
from TestTable B;
select *, sum(amount) over (partition by loanid order by id) as "sum" from testtable;
  SELECT b.id,a.LoanID,b.Amount,
           Sum(a.Amount) AS [Sum]
    FROM   #temp_table a
    JOIN   #temp_table b ON a.id <= b.id
                  AND a.LoanID = b.LoanID
    GROUP  BY b.id,a.LoanID,b.Amount