Estou tentando encontrar uma maneira de obter todos os nós ancestrais de um determinado nó usando HierarchyID. Todas as soluções que vi usando HierarchyID parecem usar um CTE ou uma variável. Existe uma maneira de fazer isso usando uma única instrução select?
Para tornar as coisas mais simples:
CREATE TABLE Employee
(
EmpId INT PRIMARY KEY IDENTITY,
EmpName VARCHAR(100) NOT NULL,
Position HierarchyID NOT NULL
)
INSERT INTO Employee (EmpName, Position)
VALUES ('CEO', '/'),
('COO', '/1/'),
('CIO', '/2/'),
('CFO', '/3/'),
('VP Financing', '/3/1/'),
('Accounts Receivable', '/3/1/1/'),
('Accountant 1', '/3/1/1/1/'),
('Accountant 2', '/3/1/1/2/'),
('Accountant 3', '/3/1/1/3/'),
('Accounts Payable', '/3/1/2/'),
('Accountant 4', '/3/1/2/1/'),
('Accountant 5', '/3/1/2/2/'),
('DBA', '/2/1/'),
('VP of Operations', '/1/1/')
Para obter "todos os nós pais de um determinado nó":
mas sempre haverá apenas um devido à natureza das hierarquias.
Se você realmente deseja obter todos os nós filhos imediatos de um determinado nó:
-- EDITAR
Vejo que você deseja todos os nós ancestrais. Talvez tente uma abordagem como esta:
ou
aqui está um método CTE para comparação: