Я пытаюсь создать древовидное представление в SSMS, используя рекурсивный SP.
Вот мой код ...
@p_Renumber NVARCHAR(7)
AS
DECLARE @orgChart TABLE
(
HMY NUMERIC(18,0) NOT NULL,
RENUMBER NVARCHAR(7) NOT NULL,
MANAGER_ID NVARCHAR(7) NULL,
ORGLEVEL NUMERIC(18,0) NOT NULL
);
WITH OrgChartDown (HMY, RENUMBER, MANAGER_ID, ORGLEVEL)
AS
(
-- Anchor member definition
SELECT HMY, RENUMBER, MANAGER_ID, 0 AS ORGLEVEL
FROM dbo.Employees
WHERE RENUMBER = @p_Renumber
UNION ALL
-- Recursive member definition down tree
SELECT e.HMY, e.RENUMBER, e.MANAGER_ID, o.ORGLEVEL + 1
FROM dbo.Employees e
INNER JOIN OrgChartDown o ON e.MANAGER_ID = o.RENUMBER
WHERE e.[STATUS] = 1
)
INSERT INTO @orgChart
SELECT HMY, RENUMBER, MANAGER_ID, ORGLEVEL
FROM OrgChartDown;
WITH OrgChartUp (HMY, RENUMBER, MANAGER_ID, ORGLEVEL)
AS
(
-- Anchor member definition
SELECT HMY, RENUMBER, MANAGER_ID, 0 AS ORGLEVEL
FROM dbo.Employees
WHERE RENUMBER = @p_Renumber
UNION ALL
-- Recursive member definition up tree
SELECT e.HMY, e.RENUMBER, e.MANAGER_ID, o.ORGLEVEL - 1
FROM dbo.Employees e
INNER JOIN OrgChartUp o ON e.RENUMBER = o.MANAGER_ID
WHERE o.RENUMBER != o.MANAGER_ID --CEO's MANAGER_ID equals own RENUMBER
AND e.[STATUS] = 1
)
INSERT INTO @orgChart
SELECT HMY, RENUMBER, MANAGER_ID, ORGLEVEL
FROM OrgChartUp
WHERE RENUMBER != @p_Renumber;
SELECT e.HMY, e.RENUMBER, e.FIRST_NAME + ' ' + e.LAST_NAME AS "NAME",
e.JOB_TITLE, e.MANAGER_ID, o.ORGLEVEL
FROM @orgChart o
INNER JOIN Employees e ON o.HMY = e.HMY
ORDER BY o.ORGLEVEL, e.LAST_NAME
GO
Я сейчас получаю результаты ...
JOB_TITLE ORGLEVEL
President & CEO -2
Chief Administrative Officer -1
Senior Director IT Business Applications 0
Test Tile EMG --(test entity in database)-- 1
Senior Applications Developer 1
Senior Applications Developer 1
Contractor 1
Senior Applications Developer 1
Lead Systems Analyst 1
Lead Systems Analyst 1
(другие поля скрыты для обеспечения информационной безопасности / целостности)
Мой вопрос заключается в том, как добавить тире ("-") при переходе по иерархическим данным.
Логика заключается в том, чтобы взять ABS (самый верхний ORGLEVEL), поэтому в этом примере кода ответ будет: ABS (-2) = 2, а затем добавьте это ко всем ORGLEVELS, чтобы президент и ORGLEVEL генерального директора будет равен 0.
С этим недавно сохраненным ORGLEVEL я хотел бы добавить тире ("-"), чтобы соответствовать значению. То есть мои данные будут выглядеть примерно так ...
JOB_TITLE ORGLEVEL
President & CEO 0
-Chief Administrative Officer 1
--Senior Director IT Business Applications 2
---Test Tile EMG --(test entity in database)-- 3
---Senior Applications Developer 3
---Senior Applications Developer 3
---Contractor 3
---Senior Applications Developer 3
---Lead Systems Analyst 3
---Lead Systems Analyst 3
Я знаю, что есть способ сделать это в коде HTML, который я использую для привязки к моей веб-форме, но, поскольку это динамическое решение, я хотел бы, чтобы это было сделано в хранимой процедуре, поэтому это простая привязка данных ( ) к сетке, которую я использую. Дайте мне знать, если у вас есть какие-либо решения этой проблемы.