Với truy vấn đệ quy sau:Recursive Query - Chỉ chọn nút nơi các nút lá đại diện cho dữ liệu hoạt động
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
tôi có thể chọn dữ liệu mà trông như thế này:
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
Ngoài ra, giả sử một bảng tồn tại với DepartmentId và ItemId (ví dụ: DepartmentItemRelationship). Các nút lá từ hệ thống heirarchy bộ phận được ghép nối với các mục ở đây.
Tôi muốn truy vấn đệ quy của mình chỉ trả về các nút (ở mọi cấp độ) có ít nhất một nút lá bên dưới chúng với một kết quả phù hợp trong bảng quan hệ bộ phận/mục. Các nút này có thể là 6 hoặc 7 cấp độ xuống, vì vậy tôi không chắc chắn cách tôi sẽ sửa đổi truy vấn của mình để chắc chắn bao gồm những điều đó.
Cảm ơn, Kyle
Kyle, nếu bạn có nút lá đáp ứng yêu cầu ở cấp 6, bạn có muốn hiển thị 5 phòng ban phía trên nút đó không? –