with test(fid, fname, fparentid, fmoney) as (
values('01', 'test01', '0', 0)
union
values('0101', 'test0101', '01', 0)
union
values('010101', 'test010101', '0101', 10)
union
values('010102', 'test010102', '0101', 20)
union
values('0102', 'test0102', '01', 200)
union
values('02', 'test02', '0', 2000)
),
temp(fid, fname, fparentid, fmoney) as (
select fid, fname, fparentid, fmoney from test
union all
select parent.fid, parent.fname, parent.fparentid, child.fmoney from temp as child, test as parent where child.fparentid = parent.fid
)
select fid, fname, sum(fmoney) as fmoney from temp group by fid, fname
values('01', 'test01', '0', 0)
union
values('0101', 'test0101', '01', 0)
union
values('010101', 'test010101', '0101', 10)
union
values('010102', 'test010102', '0101', 20)
union
values('0102', 'test0102', '01', 200)
union
values('02', 'test02', '0', 2000)
),
temp(fid, fname, fparentid, fmoney) as (
select fid, fname, fparentid, fmoney from test
union all
select parent.fid, parent.fname, parent.fparentid, child.fmoney from temp as child, test as parent where child.fparentid = parent.fid
)
select fid, fname, sum(fmoney) as fmoney from temp group by fid, fname