Ich versuche, mithilfe von HierarchyID einen Weg zu finden, um alle Ahnenknoten eines bestimmten Knotens abzurufen. Jede Lösung, die ich mit HierarchyID gesehen habe, scheint entweder einen CTE oder eine Variable zu verwenden. Gibt es eine Möglichkeit, dies mit einer einzelnen select-Anweisung zu tun?
Um die Dinge einfacher zu machen:
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/')
sql-server-2008
t-sql
Richard
quelle
quelle
Antworten:
So erhalten Sie "alle übergeordneten Knoten eines bestimmten Knotens":
aber aufgrund der Natur der Hierarchien wird es immer nur eine geben.
Wenn Sie wirklich alle unmittelbaren untergeordneten Knoten eines bestimmten Knotens erhalten möchten :
- BEARBEITEN
Ich sehe, dass Sie alle Ahnenknoten wollen. Versuchen Sie vielleicht einen Ansatz wie diesen:
oder
Hier ist eine CTE-Methode zum Vergleich:
quelle