SQL Server 递归+向上统计「终于解决」

SQL Server 递归+向上统计「终于解决」前几天有个需求需要基于分类数据向上统计总数,一开始第一个想法是通过程序来计算,后再思考能不能通过SQL脚本直接来计算 基础数据 | Id | ParentId | Category | Num | |

SQL Server 递归+向上统计

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

基础数据

Id ParentId Category Num
1 0 分类1 0
2 1 分类1-1 10
3 1 分类1-2 10
4 3 分类1-2-1 5

这是基础数据,那么希望通过sql脚本向上统计分类对应的数量.

期望结果

Id Category Num
1 分类1 25
2 分类1-1 10
3 分类1-2 10
4 分类1-2-1 5

思路

  • 用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

原文地址:https://www.cnblogs.com/sword-successful/archive/2022/08/07/16559559.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4914.html

(0)
上一篇 2023-05-30
下一篇 2023-05-30

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注