Práce s rekurzivními dotazy

Hierarchical and Recursive Queries in SQL Server

Jasmin Ludolf

Content Developer

Hierarchie IT organizace

Organizace je popsána pomocí:

  • ID – ID zaměstnance
  • Name zaměstnance
  • JobTitle ve firmě
  • Department ve firmě
  • Supervisor ve firmě

Pole popisující hierarchii:

  • ID
  • Supervisor

Zaměstnanec 2 má nadřízeného 1

Hierarchical and Recursive Queries in SQL Server

IT organizace

+-----------------------+---------------------+------------+------------+
|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          |
+-----------------------+---------------------+------------+------------+
Hierarchical and Recursive Queries in SQL Server

Běžné úlohy s hierarchickými daty

Získání hierarchie záznamu

Kdo je váš nadřízený?


Získání úrovně hierarchie

Zjistěte hierarchickou úroveň organizace


Sloučení výsledků rekurze do jednoho pole

Které nadřízené mám?

Hierarchical and Recursive Queries in SQL Server

Získání hierarchie

WITH hierarchy AS (
    SELECT ID,Supervisor
        FROM employee 
        WHERE supervisor = 0

UNION ALL SELECT emp.ID, emp.Supervisor FROM employee emp
JOIN hierarchy ON emp.Supervisor = hierarchy.ID) SELECT * FROM hierarchy
Hierarchical and Recursive Queries in SQL Server

Získání hierarchie

+---+-----------+
|ID |Supervisor |
|---|-----------|
|1  | 0         |
|2  | 1         |
|3  | 2         |
+---+-----------+
Hierarchical and Recursive Queries in SQL Server

Získání úrovně hierarchie

WITH hierarchy AS (
    SELECT ID, Supervisor, 1 as LEVEL
        FROM employee
           WHERE Supervisor = 0

UNION ALL SELECT emp.ID, emp.Supervisor, LEVEL + 1 FROM employee emp
JOIN hierarchy ON emp.Supervisor = hierarchy.ID ) SELECT * FROM hierarchy
Hierarchical and Recursive Queries in SQL Server

Získání úrovně hierarchie

+---+-----------+-------|
|ID |Supervisor | Level |
|---|-----------|-------|
|1  | 0         | 0     |
|2  | 1         | 1     |
+---+-----------+-------+
Hierarchical and Recursive Queries in SQL Server

Sloučení výsledků rekurze do jednoho pole

WITH hierarchy AS (
    SELECT ID, Supervisor, CAST('0' AS VARCHAR(MAX)) as PATH
        FROM employee
        WHERE Supervisor = 0

UNION 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
Hierarchical and Recursive Queries in SQL Server

Sloučení výsledků rekurze do jednoho pole

+-----+--------+
| PATH         |
|--------------|
| 0 -> 1 -> 4  |
+-----+--------+
Hierarchical and Recursive Queries in SQL Server

Dotazujme se na IT organizaci

Hierarchical and Recursive Queries in SQL Server

Preparing Video For Download...