1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
WITH TACHES (Id_T, Nom_T, Parent_Id_T) AS
(
SELECT 1, 'Tâche 1', NULL union ALL
SELECT 2, 'Tâche 2', 1 union ALL
SELECT 3, 'Tâche 3', 1 union ALL
SELECT 4, 'Tâche 4', NULL union ALL
SELECT 5, 'Tâche 5', 4
)
, PERSONNES (Id_P, Nom_P) AS
(
SELECT 1, 'Personne A' union ALL
SELECT 2, 'Personne B'
)
, PERSONNES_TACHES (Id_T, Id_P) AS
(
SELECT 2, 1 union ALL
SELECT 3, 1 union ALL
SELECT 5, 2
)
, Hierarchie (Id_T_init, Id_T, Nom_T_init, Nom_T, Parent_id_T, lvl) AS
(
SELECT Id_T, Id_T, Nom_T, Nom_T, null, 1
FROM TACHES
WHERE Parent_Id_T IS NULL
union ALL
SELECT H.Id_T_init, T.Id_T, H.Nom_T_init, T.Nom_T, T.Parent_id_T, H.lvl + 1
FROM Hierarchie AS H
JOIN TACHES AS T
ON T.Parent_Id_T = H.Id_T
)
, HierarchieByPerson (idtinit, lvl, idt, parentidt, nomt, nomp) AS
(
SELECT HI.ID_T_Init, HI.lvl, HI.Id_T, HI.Parent_id_T, HI.Nom_T, PE.Nom_p
FROM Hierarchie AS HI
LEFT JOIN PERSONNES_TACHES AS PT
INNER JOIN PERSONNES AS PE
ON PE.Id_p = PT.id_P
ON PT.Id_T = HI.Id_T
)
, test (idtinit, lvl, idt, parentidt, nomt, nomp) AS
(
SELECT idtinit, lvl, idt, parentidt, nomt, nomp
FROM HierarchieByPerson
WHERE nomp LIKE 'Personne A'
UNION ALL
SELECT id_t, 1, id_t, parent_id_t, nom_t, null
FROM TACHES t
JOIN test AS te ON t.id_t = te.parentidt
)
SELECT replicate('-', t.lvl) + ' ' + t.nomt, t.nomp
FROM test t
ORDER BY t.idtinit ASC,
t.lvl ASC,
t.idt ASC |