Dada la siguiente consulta recursiva:recursivo para consultas - Sólo seleccione los nodos en los nodos hoja representan datos activos
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
soy capaz de seleccionar los datos que se parece a esto:
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
También, asumir una tabla existe con DepartmentId y ItemId (por ejemplo: DepartmentItemRelationship). Los nodos de la hoja de la jerarquía del departamento se combinan con elementos aquí.
Quiero que mi consulta recursiva solo devuelva nodos (en cualquier nivel) que tengan al menos un nodo hoja debajo de ellos con una coincidencia en la tabla de relación entre departamento/elemento. Estos nodos podrían tener 6 o 7 niveles de inactividad, por lo que no estoy seguro de cómo modificaría mi consulta para asegurarme de incluirlos.
Gracias, Kyle
Kyle, si tiene un nodo hoja que cumple el requisito en un nivel 6, ¿desea mostrar los 5 departamentos por encima de ese nodo? –