add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
declare @LedgerEntries as Table ( Entry_No Int, Closed_By_Entry_No Int, Group_Id Int );
insert into @LedgerEntries ( Entry_No, Closed_By_Entry_No, Group_Id ) values
( 1, 4, 1 ),
( 2, 4, 1 ),
( 3, 4, 1 ),
( 4, 5, 1 ),
( 5, 0, 1 ),
( 6, 9, 2 ),
( 7, 9, 2 ),
( 8, 9, 2 ),
( 9, 11, 2 ),
( 10, 11, 2 ),
( 11, 0, 2 ),
( 12, 14, 3 ),
( 13, 14, 3 ),
( 14, 0, 3 ),
( 15, 16, 4 ),
( 16, 0, 4 ),
( 17, 0, 5 ),
( 18, 20, 6 ),
( 19, 20, 6 ),
( 20, 22, 6 ),
( 21, 22, 6 ),
( 22, 0, 6 );

select * from @LedgerEntries;

with Hierarchy as (
-- Anchor query.
select Entry_No, Closed_By_Entry_No, Group_Id,
Row_Number( ) over ( order by Entry_No ) as NewGroupId
from @LedgerEntries
where Closed_By_Entry_No = 0
union all
-- Recursive query.
select LE.Entry_No, LE.Closed_By_Entry_No, LE.Group_Id, H.NewGroupId
Entry_No Closed_By_Entry_No Group_Id
1 4 1
2 4 1
3 4 1
4 5 1
5 0 1
6 9 2
7 9 2
8 9 2
9 11 2
10 11 2
11 0 2
12 14 3
13 14 3
14 0 3
15 16 4
16 0 4
17 0 5
18 20 6
19 20 6
20 22 6
21 22 6
22 0 6
Entry_No Closed_By_Entry_No Group_Id NewGroupId
1 4 1 1
2 4 1 1
3 4 1 1
4 5 1 1
5 0 1 1
6 9 2 2
7 9 2 2
8 9 2 2
9 11 2 2
10 11 2 2
11 0 2 2
12 14 3 3
13 14 3 3
14 0 3 3
15 16 4 4
16 0 4 4
17 0 5 5
18 20 6 6
19 20 6 6
20 22 6 6
21 22 6 6
22 0 6 6