emp_id | emp_name --------+--------------------------------- 1 | President 2 | Vice President 3 | CEO 4 | CTO 5 | Group Project Manager 6 | Project Manager 1 8 | Team Leader 1 9 | Software Engineer 1 10 | Software Engineer 2 11 | Test Lead 1 12 | Tester 1 13 | Tester 2 7 | Project Manager 2 14 | Team Leader 2 15 | Software Engineer 3 16 | Software Engineer 4 17 | Test Lead 2 18 | Tester 3 19 | Tester 4 20 | Tester 5
Let's make a table named emp first:
select * into emp from (values (1, 'President', NULL), (2, 'Vice President', 1), (3, 'CEO', 2), (4, 'CTO', 2), (5, 'Group Project Manager', 4), (6, 'Project Manager 1', 5), (7, 'Project Manager 2', 5), (8, 'Team Leader 1', 6), (9, 'Software Engineer 1', 8), (10, 'Software Engineer 2', 8), (11, 'Test Lead 1', 6), (12, 'Tester 1', 11), (13, 'Tester 2', 11), (14, 'Team Leader 2', 7), (15, 'Software Engineer 3', 14), (16, 'Software Engineer 4', 14), (17, 'Test Lead 2', 7), (18, 'Tester 3', 17), (19, 'Tester 4', 17), (20, 'Tester 5', 17) ) as x(emp_id, emp_name, mgr_id)
Postgresql version:
with recursive org(emp_id, emp_name, emp_level, mgr_id, sort) as ( select a.emp_id, a.emp_name, 0, a.mgr_id, a.emp_name from emp a where a.mgr_id is null union all select b.emp_id, b.emp_name, emp_level + 1, b.mgr_id, -- i think this is quickbooks style sorting, saw it first there sort || ' : ' || b.emp_name from emp b join org on org.emp_id = b.mgr_id ) select emp_id, repeat(' ', emp_level * 2) || emp_name as emp_name /* uncomment the following if you want to see the full path of employee up to its president */ -- ,sort from org order by sort
Sql Server version:
with org(emp_id, emp_name, emp_level, mgr_id, sort) as ( select a.emp_id, a.emp_name, 0, a.mgr_id, convert(varchar(8000), a.emp_name) from emp a where a.mgr_id is null union all select b.emp_id, b.emp_name, emp_level + 1, b.mgr_id, -- i think this is quickbooks style sorting, saw it first there sort + ' : ' + b.emp_name from emp b join org on org.emp_id = b.mgr_id ) select emp_id, emp_name = REPLICATE(' ',emp_level * 2) + emp_name /* uncomment the following if you want to see the full path of employee up to its president */ -- sort from org order by sort
Uncomment the sort to infer how it facilitated the hierarchical display of records
No comments:
Post a Comment