我正在尝试找到一种方法来使用 HierarchyID 获取给定节点的所有祖先节点。我见过的每个使用 HierarchyID 的解决方案似乎都使用 CTE 或变量。有没有办法使用单个选择语句来做到这一点?
为了让事情更简单:
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/')
要获取“给定节点的所有父节点”:
但由于层次结构的性质,只会有一个。
如果您真的想获取给定节点的所有直接子节点:
- 编辑
我看到您想要所有祖先节点。也许尝试这样的方法:
或者
这是一个CTE方法进行比较: