27,579
社区成员
发帖
与我相关
我的任务
分享
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([CID] NVARCHAR(100),[年] NVARCHAR(100),[月] int,[期初借] int,[期初贷] int,[借] int,[贷] int,[期末借] int,[期末贷] int,[是否期初行] int)
Insert #T
select '3554','2017',8,0,5000,0,5000,0,5000,0 union all
select '3554','2017',10,0,0,33000,8900,0,0,1 union all
select '3554','2017',11,0,0,20790,20000,0,0,1 union all
select '3554','2017',12,0,0,2160,10000,0,0,1 union all
select '3558','2017',8,0,3000,0,3000,0,3000,0 union all
select '3558','2017',10,0,0,33000,8900,0,0,1
Go
--测试数据结束
;WITH ctea AS (
SELECT *,ROW_NUMBER()OVER(PARTITION BY CID ORDER BY 年,月) AS Num FROM #T
),cteb AS (
SELECT ctea.CID ,
ctea.年 ,
ctea.月 ,
ctea.期初借 ,
ctea.期初贷 ,
ctea.借 ,
ctea.贷 ,
期初借+借 AS 期末借,
期初贷+贷 AS 期末贷,
ctea.是否期初行 ,
ctea.Num
FROM ctea
WHERE Num = 1
UNION ALL
SELECT ctea.CID ,
ctea.年 ,
ctea.月 ,
cteb.期末借 ,
cteb.期末贷 ,
ctea.借 ,
ctea.贷 ,
cteb.期末借+ctea.借 AS 期末借,
cteb.期末贷+ctea.贷 AS 期末贷,
ctea.是否期初行 ,
ctea.Num
FROM ctea
JOIN cteb ON cteb.Num + 1= ctea.Num AND cteb.CID = ctea.CID
)
SELECT CID ,
年 ,
月 ,
期初借 ,
期初贷 ,
借 ,
贷 ,
期末借 ,
期末贷 ,
是否期初行
FROM cteb
ORDER BY CID ,
年 ,
月
if not object_id(N'Tempdb..#tab') is null
drop table #tab
Go
Create table #tab([CID] VARCHAR(20),[年] VARCHAR(20),[月] int,[期初借] int,[期初贷] int,[借] int,[贷] int,[期末借] int,[期末贷] int,[是否期初行] int)
Insert #tab
select '3554','2017',8,0,5000,0,5000,0,5000,0 union all
select '3554','2017',10,0,0,33000,8900,0,0,1 union all
select '3554','2017',11,0,0,20790,20000,0,0,1 union all
select '3554','2017',12,0,0,2160,10000,0,0,1 union all
select '3558','2017',8,0,3000,0,3000,0,3000,0 union all
select '3558','2017',10,0,0,33000,8900,0,0,1
--测试数据结束
WITH cte AS (
SELECT *,ROW_NUMBER() OVER(PARTITION BY cid ORDER BY 是否期初行,年,月) as rn FROM #tab
),
cte2 AS (
Select * from cte WHERE rn=1
UNION ALL
SELECT a.cid,a.年,a.月,b.期末借,b.期末贷,a.借,a.贷,b.期末借+a.借,b.期末贷+a.贷,a.是否期初行,a.rn FROM cte a
INNER JOIN cte2 b ON a.cid=b.cid AND a.rn=b.rn+1
)
SELECT cid,年,月,期初借,期初贷,借,贷,期末借,期末贷,是否期初行 FROM cte2
ORDER BY cid,年,月