IF OBJECT_ID(N'dbo.RecurseTest') IS NOT NULL DROP TABLE dbo.RecurseTest; GO CREATE TABLE dbo.RecurseTest ( Id BIGINT NOT NULL, EmployeeName VARCHAR(255) NOT NULL, ParentId BIGINT NULL ) GO insert into dbo.RecurseTest values(1, 'Emp1', 0); insert into dbo.RecurseTest values(2, 'Emp2', 1); insert into dbo.RecurseTest values(3, 'Emp3', 1); insert into dbo.RecurseTest values(4, 'Emp4', 2); insert into dbo.RecurseTest values(5, 'Emp5', 2); insert into dbo.RecurseTest values(6, 'Emp6', 3); GO SELECT L1.EmployeeName L1 , L2.EmployeeName L2 , L3.EmployeeName L3 , L4.EmployeeName L4 FROM RecurseTest L1 left outer join RecurseTest L2 on L2.parentid = L1.Id left outer join RecurseTest L3 on L3.parentid = L2.Id left outer join RecurseTest L4 on L4.parentid = L3.Id ORDER BY 1,2,3,4 /* Hierarchy 1 +-2 +-4 +-5 +-3 +-6 */