Hierarchical and Recursive Queries in SQL Server
Jasmin Ludolf
Content Developer
ข้อมูลองค์กรประกอบด้วย:
ID - รหัสพนักงานName ชื่อพนักงานJobTitle ตำแหน่งในบริษัทDepartment แผนกในบริษัทSupervisor หัวหน้างานในบริษัทฟิลด์ที่ใช้อธิบายลำดับชั้น:
IDSupervisorพนักงาน 2 มีหัวหน้าคือพนักงาน 1
+-----------------------+---------------------+------------+------------+
|ID | Name | Position | Department | Supervisor |
|-----------------------|---------------------|------------|------------|
| 1 | Heinz Griesser | IT Director | IT | 0 |
| 2 | Andreas Sitter | Security Manager | IT | 1 |
| 3 | Thomas Bergman | Innovation Manager | IT | 1 |
| 4 | Hannes Berg | Operation Manager | IT | 1 |
| 5 | Anna Kruggel | Administrator | IT | 4 |
| 6 | Karin Pacher | Developer | IT | 4 |
+-----------------------+---------------------+------------+------------+
ดึงลำดับชั้นของระเบียน
หัวหน้าของคุณคือใคร?
ดึงระดับของลำดับชั้น
ระบุระดับลำดับชั้นขององค์กร
รวมผลลัพธ์ recursion ไว้ในฟิลด์เดียว
ฉันมีหัวหน้าคนใดบ้าง?
WITH hierarchy AS ( SELECT ID,Supervisor FROM employee WHERE supervisor = 0UNION ALL SELECT emp.ID, emp.Supervisor FROM employee empJOIN hierarchy ON emp.Supervisor = hierarchy.ID) SELECT * FROM hierarchy
+---+-----------+
|ID |Supervisor |
|---|-----------|
|1 | 0 |
|2 | 1 |
|3 | 2 |
+---+-----------+
WITH hierarchy AS ( SELECT ID, Supervisor, 1 as LEVEL FROM employee WHERE Supervisor = 0UNION ALL SELECT emp.ID, emp.Supervisor, LEVEL + 1 FROM employee empJOIN hierarchy ON emp.Supervisor = hierarchy.ID ) SELECT * FROM hierarchy
+---+-----------+-------|
|ID |Supervisor | Level |
|---|-----------|-------|
|1 | 0 | 0 |
|2 | 1 | 1 |
+---+-----------+-------+
WITH hierarchy AS ( SELECT ID, Supervisor, CAST('0' AS VARCHAR(MAX)) as PATH FROM employee WHERE Supervisor = 0UNION ALL SELECT emp.ID, emp.Supervisor, Path + '->' + CAST(emp.Supervisor AS VARCHAR(MAX)) FROM employee emp INNER JOIN hierarchy ON emp.Supervisor = hierarchy.ID ) SELECT * FROM hierarchy
+-----+--------+
| PATH |
|--------------|
| 0 -> 1 -> 4 |
+-----+--------+
Hierarchical and Recursive Queries in SQL Server