SQL Server 递归+向上统计

打印 上一主题 下一主题

主题 878|帖子 878|积分 2634

前几天有个需求需要基于分类数据向上统计总数,一开始第一个想法是通过程序来计算,后再思考能不能通过SQL脚本直接来计算

基础数据

IdParentIdCategoryNum10分类1021分类1-11031分类1-21043分类1-2-15这是基础数据,那么希望通过sql脚本向上统计分类对应的数量.

期望结果

IdCategoryNum1分类1252分类1-1103分类1-2104分类1-2-15
思路


  • 用sql递归CTE给每一个层次设置统计路径
  • 通过统计路径内联, 统计个数并分组展示
  1. WITH result (Id, ParentId, Category, Num)
  2. AS
  3. (
  4.   SELECT 1, 0, '分类1', 0
  5.   UNION ALL
  6.   SELECT 2, 1, '分类1-1',10
  7.   UNION ALL
  8.   SELECT 3, 1, '分类1-2', 10
  9.   UNION ALL
  10.   SELECT 4, 3, '分类1-2-1', 5
  11. ),
  12. CTE(Id, ParentId, Category, Path, Num)
  13. As
  14. (
  15.   SELECT A.Id, A.ParentId, A.Category, CAST(A.Id As VARCHAR(MAX))+'->',A.Num FROM result A WHERE A.ParentId = 0
  16.   UNION ALL
  17.   SELECT B.Id, B.ParentId, B.Category,C.Path+CAST(B.Id As VARCHAR(MAX)), B.Num FROM result B
  18.   INNER JOIN CTE c on C.Id = B.ParentId
  19. )
  20. SELECT C.Id,
  21. C.Category,
  22. SUM(C1.Num) AS Num
  23. FROM CTE AS C
  24. --整个统计方法的核心就是这一句代码:CHARINDEX
  25. INNER JOIN CTE AS C1 ON CHARINDEX(C.Path, C1.Path) = 1
  26. GROUP BY C.ID,C.Category
复制代码
参考

https://www.cnblogs.com/axiadi/p/7715529.html

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立聪堂德州十三局店

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表