Dies kann in SQL Server 2005 und höher mithilfe von Common Table Expressions (CTEs) erfolgen. Hier ist ein großartiger Link von MSDN, der rekursive Abfragen beschreibt:Recursive Queries Using Common Table Expressions
Hier ist ein Beispiel:
Wenn Sie sich eine hierarchische Reihe von Personen vorstellen, können Sie mit dieser Abfrage die vollständige Reihe jeder Person sehen UND ihren Platz in der Hierarchie berechnen. Es kann geändert werden, um jede untergeordnete Beziehung zu finden.
Anstelle der ID der Person tauschen Sie die ID der Zeile aus, die Sie als übergeordnetes Element verwenden.
--Create table of dummy data
create table #person (
personID integer IDENTITY(1,1) NOT NULL,
name varchar(255) not null,
dob date,
father integer
);
INSERT INTO #person(name,dob,father)Values('Pops','1900/1/1',NULL);
INSERT INTO #person(name,dob,father)Values('Grandma','1903/2/4',null);
INSERT INTO #person(name,dob,father)Values('Dad','1925/4/2',1);
INSERT INTO #person(name,dob,father)Values('Uncle Kev','1927/3/3',1);
INSERT INTO #person(name,dob,father)Values('Cuz Dave','1953/7/8',4);
INSERT INTO #person(name,dob,father)Values('Billy','1954/8/1',3);
DECLARE @OldestPerson INT;
SET @OldestPerson = 1; -- Set this value to the ID of the oldest person in the family
WITH PersonHierarchy (personID,Name,dob,father, HierarchyLevel) AS
(
SELECT
personID
,Name
,dob
,father,
1 as HierarchyLevel
FROM #person
WHERE personID = @OldestPerson
UNION ALL
SELECT
e.personID,
e.Name,
e.dob,
e.father,
eh.HierarchyLevel + 1 AS HierarchyLevel
FROM #person e
INNER JOIN PersonHierarchy eh ON
e.father = eh.personID
)
SELECT *
FROM PersonHierarchy
ORDER BY HierarchyLevel, father;
DROP TABLE #person;