SQL Practice Logo

SQLPractice Online

Recursive CTEs for Hierarchical Data: Examples

Module: Subqueries & CTEs

Organization Chart with Levels and Paths

advanced

Build complete org chart showing reporting structure, management levels, and full reporting paths from CEO to each employee

WITH RECURSIVE org_chart AS (

-- Base case: Find CEO (no manager)

SELECT

id,

name,

manager_id,

title,

1 as level,

name as path,

CAST(name AS VARCHAR(1000)) as sort_path

FROM employees

WHERE manager_id IS NULL

UNION ALL

-- Recursive case: Find direct reports

SELECT

e.id,

e.name,

e.manager_id,

e.title,

oc.level + 1,

oc.path || ' → ' || e.name,

oc.sort_path || '|' || e.name

FROM employees e

JOIN org_chart oc ON e.manager_id = oc.id

WHERE oc.level < 10 -- Prevent infinite recursion

)

SELECT

level,

REPEAT(' ', level - 1) || name as indented_name,

title,

path

FROM org_chart

ORDER BY sort_path;

level | indented_name | title | path

------+-------------------------+--------------------+----------------------------------

1 | Sarah Chen | CEO | Sarah Chen

2 | Michael Rodriguez | VP Engineering | Sarah Chen → Michael Rodriguez