CREATE FUNCTION dbo.GetSubtree(@mgr AS INT, @maxlevels AS INT = NULL)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
WITH EmpsCTE AS
(
SELECT empid, CAST(NULL AS INT) AS mgrid, empname, salary, 0 as lvl,
CAST(‘.’ AS VARCHAR(900)) AS sortpath
FROM dbo.Employees
WHERE empid = @mgr
UNION ALL
SELECT S.empid, S.mgrid, S.empname, S.salary, M.lvl + 1 AS lvl,
CAST(M.sortpath + CAST(S.empid AS VARCHAR(10)) + ‘.’ AS VARCHAR(900))
AS sortpath
FROM EmpsCTE AS M
INNER JOIN dbo.Employees AS S
ON S.mgrid = M.empid
AND (M.lvl < @maxlevels OR @maxlevels IS NULL)
)
SELECT empid, mgrid, empname, salary, lvl, sortpath
FROM EmpsCTE;
Это моя функция на SQL-сервере, но когда я выполняю это, используя запрос ниже, я не могу понять вывод столбца sortpath
SELECT empid, REPLICATE(‘ | ‘, lvl) + empname AS emp,
mgrid, salary, lvl, sortpath
FROM dbo.GetSubtree(3, NULL) AS T
ORDER BY sortpath;
, тогда вывод
empid empname mgrid salary lvl sortpath
------ ----------------- ------ -------- ---- -----------
3 Ina NULL 7500.00 0 .
7 | Aaron 3 5000.00 1 .7.
11 | | Gabriel 7 3000.00 2 .7.11.
9 | | Rita 7 3000.00 2 .7.9.
12 | | | Emilia 9 2000.00 3 .7.9.12.
13 | | | Michael 9 2000.00 3 .7.9.13.
14 | | | Didi 9 1500.00 3 .7.9.14.
теперь, с моей точки зрения, строка, в которой есть empid 11, должна иметь только .11.Отпуск sortpath может кто-нибудь мне с этим исполнением