SQLServer树型求和

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

-- this document design by zzl --
-- function : total about a tree structure
-- author : Lori.zhang ,zzl
-- display view : a1   3
--                a11  2
--                a111 1
------------------------------------------
ALTER  proc [dbo].[zzl_task_tree_total] --通过指定的taskid,来获取它和它下面的所有子元素的汇总和
  @taskid int
as 
declare @level_tt table(taskid nvarchar(1000),parentID nvarchar(1000),level int) --声明一个表变更,ID,上级ID,及层次
  declare @level int
  set @level=0
  insert @level_tt(taskid,parentID,level) --插入到表变量@level_tt,将所有上级ID为null或是为0的记录
  select taskid,parentID,@level from task where isnull (parentID,'')=''  
  while @@ROWCOUNT>0 --当存在这样的记录时
  begin 
          set @level=@level+1 --层次变更自加1
          insert @level_tt(taskid,parentID,level) --插入到表变更@level_tt,将所有的task表的上级ID等于@level_tt表的ID并且是它的低一级的记录
          select a.taskid,cast(b.parentID as varchar)+cast(a.taskid as varchar),@level
            from task a,@level_tt b
            where a.parentID=b.taskid and b.level=@level-1
 end
 select * from @level_tt  --显示级联的结构
-- 上面程序执行的结果为:
-- taskid  parentid  level 
-- 1   0    0
-- 2   01    1
-- 3   01    1
-- 4         012         2
-- 从上面的结果可以看到,表中的1,2,4有着关系,他们是树型结果的,如果想求1的结果,需要将2和4的结果相加
declare @tmp table(taskid int,parentid int,total float,moneyTotal float) --再定义表变更@tmp
insert into @tmp --插入到@tmp表,从task表,@level_tt表,求和对象为realmoney,当realmoney为空时,把它设为0,求和条件为
select a.taskid,a.parentID,SUM(isnull(c.realwork,0)) as total,SUM(isnull(c.realmoney,0)) as moneytotal --parentid为parentid%,使用通配符
  from task a,@level_tt b,Task c,@level_tt d
  where (a.taskid=b.taskid and 
c.taskid=d.taskid
        and d.parentID like b.parentID+'%' ) 
 and (a.taskid=@taskid)
  group by a.taskid,a.parentID
  order by a.parentID

--select @total=total from @tmp 
if @@rowcount=0  --如果没有找到记录,就向临时表插入空记录
begin
     insert into @tmp(taskid,parentid,total,moneytotal)values(0,0,0,0) --如果没有记录,就插入一个0记录
end
select total,moneytotal from @tmp --选择临时表

本文转自博客园张占岭(仓储大叔)的博客,原文链接:SQLServer树型求和如需转载请自行联系原博主。

目录
相关文章
|
SQL 机器学习/深度学习 算法
SQL SERVER ANALYSIS SERVICES决策树、聚类、关联规则挖掘分析电商购物网站的用户行为数据
SQL SERVER ANALYSIS SERVICES决策树、聚类、关联规则挖掘分析电商购物网站的用户行为数据
|
13天前
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
157 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
12天前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
13天前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
6月前
|
SQL 数据库 数据安全/隐私保护
数据库数据恢复——sql server数据库被加密的数据恢复案例
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。
|
2月前
|
SQL 人工智能 Linux
SQL Server 2025 RC0 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC0 发布 - 从本地到云端的 AI 就绪企业数据库
137 5
|
18天前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
3月前
|
SQL 存储 数据库
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
551 0
|
3月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
281 0
|
5月前
|
SQL 人工智能 数据库
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
298 0
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库

热门文章

最新文章