Sql 使用和函数
我有以下结构的表: TestTable ID INT,LoanID INT,Amount INTSql 使用和函数,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
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