我想获取所有祖先,所选类别和直接子项,并计算每个类别及其所有子项中的所有项目。如何在此sql查询中获取所有祖先,所选类别和直接子项
这是我做过什么:
DECLARE @CategoryId INT = 8
;WITH Re AS
(
SELECT CategoryId, Name, ParentId, CategoryId RootId, 0 Depth, Sort = CAST(Name AS VARCHAR(MAX))
FROM Category
WHERE CategoryId = @CategoryId OR ParentId = @CategoryId
UNION ALL
SELECT C.CategoryId, C.Name, C.ParentId, RootId, Depth = Re.Depth + 1, Sort = Re.Sort + CAST(C.Name AS VARCHAR(200))
FROM Re JOIN Category C ON Re.CategoryId = C.ParentId
)
SELECT Y.CategoryId, Y.Name, Y.ParentId, X.CatCount
FROM (SELECT RootId, COUNT(I.CategoryId) catCount
FROM Re LEFT OUTER JOIN Item I ON Re.CategoryId = I.CategoryId
GROUP BY RootId) X
JOIN (SELECT Re.CategoryId, Re.ParentId, Name, MAX(Depth) MaxDepth
FROM Re
GROUP BY Re.CategoryId, Re.ParentId, Name) Y ON Y.CategoryId = X.RootId
ORDER BY CategoryId
返回我想要什么,但有一点问题是它。例如当@CategoryID = 8,此查询应显示:
CategoryId Name ParentId CatCount
0 A NULL 16
1 B 0 10
7 H 1 4
8 I 7 2
13 N 8 1
但它返回:当选择子类别
CategoryId Name ParentId CatCount
8 I 7 2
13 N 8 1
祖先未示出。
- 问题在哪里?
- 如何优化此查询?
我会感谢另外一个人帮助我
你是什么样的输入数据? –
在此查询或我的某个表中输入样本数据? – Masoud
对于那个预期产出 –