V předešlých dílech tohoto miniseriálu o hierarchiích jsme zapomněli na jednu věc, která se může hodit a tou je způsob jak zmapovat v hierarchii hloubku jednotlivých členů neboli úroveň hierarchie. Stejně tak může být užitečné umět zobrazit Path – cestu jednotlivých členů hierarchie. Vycházet budu opět z prvního dílu o úvodu do parent – child hierarchie a tabulky se zaměstnanci, kterou jsem si v rámci tohoto článku připravil.
Určení úrovně hierarchie a cesty (Path)
WITH nadrizeny AS
(
--vyber nadzizeneho
SELECT id_zamestnanec, id_nadrizeny, pozice, jmenoprijmeni,plat, 0 AS Hierarchy_Level,
CAST(jmenoprijmeni AS VARCHAR(1024)) AS Path_jmenoprijmeni,
CAST(id_zamestnanec AS VARCHAR(1024)) AS Path_id_zamestnanec
FROM Temp.dbo.zamestnanci
WHERE id_zamestnanec=15
UNION ALL
--rekurzivní dotaz na jeho podřízené
SELECT zam.id_zamestnanec, zam.id_nadrizeny, zam.pozice, zam.jmenoprijmeni, zam.plat,
Hierarchy_Level+1,
CAST(nad.Path_jmenoprijmeni + ' | ' + CAST(zam.jmenoprijmeni AS VARCHAR(1024)) AS VARCHAR(1024)) AS Path_jmenoprijmeni,
CAST(nad.Path_id_zamestnanec + ' | ' + CAST(zam.id_zamestnanec AS VARCHAR(1024)) AS VARCHAR(1024)) AS Path_id_zamestnanec
FROM Temp.dbo.zamestnanci zam INNER JOIN nadrizeny nad
ON zam.id_nadrizeny = nad.id_zamestnanec
)
SELECT
id_zamestnanec,
jmenoprijmeni,
pozice,
plat,
Hierarchy_Level,
Path_jmenoprijmeni,
Path_id_zamestnanec
FROM nadrizeny;
Výsledek je na obrázku níže
- Hierarchy_Level – zobrazení úrovně člena hierarchie. Ředitel má 0, manažer 1 a zaměstnanec 2. Pokud by měla hierarchie více členů, tak by bylo více levelů
- Path_jmenoprijmeni – zobrazení cesty od nejvyššího člena k nejnižšímu. Zobrazujeme jméno a příjmení oddělení znakem “|”
- Path_id_zamestnanec – podobně jao v předchozím případě je to cesta, ale zobrazujeme ID. To nám může lépe vyhovovat kvůli rychlosti dotazu a také s tímto formátem rychleji pracují některé reportovací nástroje – např. Power BI