前几天有个需求需要基于分类数据向上统计总数,一开始第一个想法是通过程序来计算,后再思考能不能通过SQL脚本直接来计算
基础数据
IdParentIdCategoryNum10分类1021分类1-11031分类1-21043分类1-2-15这是基础数据,那么希望通过sql脚本向上统计分类对应的数量.
期望结果
IdCategoryNum1分类1252分类1-1103分类1-2104分类1-2-15
思路
- 用sql递归CTE给每一个层次设置统计路径
- 通过统计路径内联, 统计个数并分组展示
- WITH result (Id, ParentId, Category, Num)
- AS
- (
- SELECT 1, 0, '分类1', 0
- UNION ALL
- SELECT 2, 1, '分类1-1',10
- UNION ALL
- SELECT 3, 1, '分类1-2', 10
- UNION ALL
- SELECT 4, 3, '分类1-2-1', 5
- ),
- CTE(Id, ParentId, Category, Path, Num)
- As
- (
- SELECT A.Id, A.ParentId, A.Category, CAST(A.Id As VARCHAR(MAX))+'->',A.Num FROM result A WHERE A.ParentId = 0
- UNION ALL
- SELECT B.Id, B.ParentId, B.Category,C.Path+CAST(B.Id As VARCHAR(MAX)), B.Num FROM result B
- INNER JOIN CTE c on C.Id = B.ParentId
- )
- SELECT C.Id,
- C.Category,
- SUM(C1.Num) AS Num
- FROM CTE AS C
- --整个统计方法的核心就是这一句代码:CHARINDEX
- INNER JOIN CTE AS C1 ON CHARINDEX(C.Path, C1.Path) = 1
- GROUP BY C.ID,C.Category
复制代码 参考
https://www.cnblogs.com/axiadi/p/7715529.html
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |