Özyinelemeli sorgularla çalışmak

SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

Jasmin Ludolf

Content Developer

Bir BT kuruluşunun hiyerarşisi

Kuruluş şu şekilde tanımlanır:

  • ID - Çalışan kimliği
  • Çalışanın Name alanı
  • Şirketteki JobTitle
  • Şirketteki Department
  • Şirketteki Supervisor

Hiyerarşiyi tanımlayan alanlar:

  • ID
  • Supervisor

Çalışan 2'nin yöneticisi 1'dir

SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

BT kuruluşu

+-----------------------+---------------------+------------+------------+
|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          |
+-----------------------+---------------------+------------+------------+
SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

Hiyerarşik veriler için yaygın görevler

Bir kaydın hiyerarşisini alın

Yöneticiniz kim?


Hiyerarşi düzeyini alın

Bir kuruluşun hiyerarşi düzeyini alın


Özyineleme sonuçlarını tek alanda birleştirin

Hangi yöneticilere sahibim?

SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

Hiyerarşiyi alın

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
SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

Hiyerarşiyi alın

+---+-----------+
|ID |Supervisor |
|---|-----------|
|1  | 0         |
|2  | 1         |
|3  | 2         |
+---+-----------+
SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

Hiyerarşi düzeyini alın

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
SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

Hiyerarşi düzeyini alın

+---+-----------+-------|
|ID |Supervisor | Level |
|---|-----------|-------|
|1  | 0         | 0     |
|2  | 1         | 1     |
+---+-----------+-------+
SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

Özyineleme sonuçlarını tek alanda birleştirme

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
SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

Özyineleme sonuçlarını tek alanda birleştirme

+-----+--------+
| PATH         |
|--------------|
| 0 -> 1 -> 4  |
+-----+--------+
SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

BT kuruluşunu sorgulayalım

SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

Preparing Video For Download...