Angesichts der folgenden rekursiven Abfrage darstellen:rekursive Abfrage - Nur ausgewählte Knoten, an denen Blattknoten aktive Daten
WITH DepartmentHierarchy (DepartmentID, Name, IsInactive, IsSpecial, ParentId, HierarchyLevel) AS
(
-- Base case
SELECT
DepartmentId,
Name,
IsInactive,
IsSpecial,
ParentId,
1 as HierarchyLevel
FROM StoreDepartment
WHERE ParentId IS NULL
UNION ALL
-- Recursive step
SELECT
d.DepartmentId,
d.Name,
d.IsInactive,
d.IsSpecial,
d.ParentId,
dh.HierarchyLevel + 1 AS HierarchyLevel
FROM StoreDepartment d
INNER JOIN DepartmentHierarchy dh ON
d.ParentId = dh.DepartmentId
) SELECT * FROM DepartmentHierarchy
Ich bin in der Lage, Daten auszuwählen, die wie folgt aussieht:
DepartmentId, Name, IsInactive, IsSpecial, ParentId, HeirarchyLevel
1, Store, 0, 0, NULL, 1
2, Main Department 1, 0, 1, 2
3, Main Department 2, 0, 1, 2
4, Sub For Main 1, 0, 2, 3
sei auch angenommen, ein Tabelle existiert mit DepartmentId und ItemId (Beispiel: DepartmentItemRelationship). Blattknoten aus der Abteilung Hierarchie werden hier mit Objekten gepaart.
Ich möchte meine rekursive Abfrage nur Knoten (auf jeder Ebene) zurückgeben, die mindestens einen Blattknoten unter ihnen mit einer Übereinstimmung in der Abteilungs/Element-Beziehungstabelle haben. Diese Knoten könnten 6 oder 7 Ebenen tiefer liegen, also bin ich mir nicht sicher, wie ich meine Abfrage ändern würde, um sicher zu sein, dass sie diese enthält.
Danke, Kyle
Kyle, wenn Sie einen Blattknoten haben, der die Anforderung in einer Ebene 6 erfüllt, möchten Sie die 5 Abteilungen über diesem Knoten anzeigen? –