590
社区成员
发帖
与我相关
我的任务
分享
;WITH ctea AS (
SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY Initialcontract ORDER BY VersionNo ) AS rn
FROM #T
),cteb AS (
SELECT * ,
CONVERT(DECIMAL(18,2),0.00) AS SumAmount
FROM ctea
WHERE rn = 1
UNION ALL
SELECT ctea.* ,
CONVERT(DECIMAL(18,2),ctea.TotalAmount - cteb.TotalAmount)
FROM ctea
JOIN cteb ON cteb.rn + 1 = ctea.rn
AND cteb.Initialcontract = ctea.Initialcontract
)
SELECT Initialcontract ,
TotalAmount ,
VersionNo ,
SumAmount
FROM cteb
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([Initialcontract] nvarchar(28),[TotalAmount] int,[VersionNo] int)
Insert #T
select N'CS170407',1200,1 union all
select N'CS170407',1400,2 union all
select N'CS170407',1800,3
Go
--测试数据结束
;WITH ctea AS (
SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY Initialcontract ORDER BY VersionNo ) AS rn
FROM #T
),cteb AS (
SELECT * ,
0 AS SumAmount
FROM ctea
WHERE rn = 1
UNION ALL
SELECT ctea.* ,
ctea.TotalAmount - cteb.TotalAmount
FROM ctea
JOIN cteb ON cteb.rn + 1 = ctea.rn
AND cteb.Initialcontract = ctea.Initialcontract
)
SELECT Initialcontract ,
TotalAmount ,
VersionNo ,
SumAmount
FROM cteb