DROPtable test_2021;createtable test_2021
(
id VARCHAR(20)notnull,
ParentId VARCHAR(20)notnull,
code VARCHAR(20)null,
name VARCHAR(20)null,
num DECIMAL(12,2)null)INSERTinto test_2021(id,ParentId,code,name,num)VALUES('01','00','001','单位',0),('02','01','002','子单位',0),('03','02','003','分部1',9.87),('04','02','004','分部2',8.54),('05','02','005','分部3',6.34),('06','01','006','子单位2',0),('07','06','007','分部4',10)//递归生成个长代码,用于汇总金额的计算;with test as(select Cast(Code asVARCHAR(max))as test,Name,Code,id,ParentId,num
from test_2021 where ParentId='00'unionallselect j.test +'.'+ t.Code as test,t.Name,t.Code,t.id,t.ParentId,t.num from test j join test_2021 t on j.ID=t.ParentId
)--金额汇总select*,casewhen num =0then(SELECTSUM(isnull(num,0))FROM test WHERE test LIKE b.test +'.%')else num endas sumNum
from test b