BOM逐级向上汇总应用实例

本文提供了一个SQL递归查询的实例,展示了如何通过递归公用表表达式(CTE)来计算层级结构中各节点的累积得分。该示例首先创建了一个包含层级关系的数据表,并填充了示例数据,然后通过递归查询实现了从根节点到子节点的得分累加。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IF NOT OBJECT_ID('[tbTest]') IS NULL DROP TABLE [tbTest] GO CREATE TABLE tbTest ( id nvarchar(5), parentID nvarchar(5), score decimal(18,2) ) insert tbTest select '1','',10 union all select '2','1',30 union all select '3','2',30 union all select '4','1',50 union all select '5','',10 union all select '6','5',30 GO /* select * from tbTest id parentID score ----- -------- --------------------------------------- 1 10.00 2 1 30.00 3 2 30.00 4 1 50.00 5 10.00 6 5 30.00 (6 行受影响) */ /* --要得到如下结果 id parentid score ----- -------- --------------------------------------- 1 130.00 2 1 60.00 3 2 30.00 4 1 50.00 5 40.00 6 5 30.00 (6 行受影响) */ ;with t as ( select *,total = score from tbTest as a where not exists(select * from tbTest where a.id = parentid) union all select a.*,cast(b.total + a.score as decimal(18,2)) from tbTest as a join t as b on a.id = b.parentid ) select id,parentid,sum(total) as score from t group by id,parentid order by id /* id parentid score ----- -------- ------------- 1 130.00 2 1 60.00 3 2 30.00 4 1 50.00 5 40.00 6 5 30.00 (6 行受影响) */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值