--測試

create table ta ( 项目 varchar ( 20), 上级项目 varchar ( 20), num int )

insert ta

select 'A' , '' , 100 union all

select 'B' , 'A' , 200 union all

select 'C' , 'B' , 300 union all

select 'D' , 'B' , 400 union all

select 'E' , 'C' , 500 union all

select 'F' , 'D' , 600 union all

select 'H' , 'E' , 700 union all

select 'G' , 'F' , 800

-- 如果要显示上级的项目 :

create function roy_f( @ 项目 varchar ( 20))

returns varchar ( 100)

as

begin

declare @ 上级项目 varchar ( 20)

select @ 上级项目 = 上级项目 from ta where 项目 = @ 项目

return case when @ 上级项目 is null then null

else   isnull ( dbo. roy_f( @ 上级项目 )+ '-' , '' )+ @ 项目 end

end

-- 如果显示各级项目的汇总金额 :

create function roy_f2( @ 项目 varchar ( 20))

returns int

as

begin

declare @tb table ( 项目 varchar ( 20), 上级项目 varchar ( 20), num int , lev int )

declare @i int , @sum int

set @i= 0

insert @tb select *, @i from ta where 项目 = @ 项目

while @@rowcount > 0

begin

set @i= @i+ 1

insert @tb

select a.*, @i

from ta a, @tb b

where b. 项目 = a. 上级项目 and b. lev= @i- 1

end

select @sum= sum ( num) from @tb

return @sum

end

-- 测试 :

select 项目 , 金额 = dbo. roy_f2( 项目 ), 关系 = dbo. roy_f( 项目 ) from ta

/*

项目                    金额           关系

-------------------- ----------- ---------------

A                    3600        A

B                    3500        A-B

C                    1500        A-B-C

D                    1800        A-B-D

E                    1200        A-B-C-E

F                    1400        A-B-D-F

H                    700         A-B-C-E-H

G                    800         A-B-D-F-G

(所影响的行数为 8 行)

*/

-- 用存储过程统计 :

create proc roy_p @ 项目 varchar ( 20)

as

begin

declare @i int

set @i= 0

select *, 级数 = @i into #

from ta where 项目 = @ 项目

while @@rowcount > 0

begin

set @i= @i+ 1

insert #

select ta.*, 级数 = @i

from ta, # b

where ta. 上级项目 = b. 项目

and b. 级数 = @i- 1

end

select [sum]= sum ( num) from #

end

-- 测试 :

exec roy_p 'A'

/*

sum

-----------

3600

(所影响的行数为 1 行)

*/

-- 删除测试 :

drop function roy_f, roy_f2

drop proc roy_p

drop table ta

转载于:https://www.cnblogs.com/Roy_88/archive/2006/12/24/5463118.html

递归用函数、存储过程实现的效果相关推荐

  1. php addslashes 数组,用递归addslashes函数转义数组

    有个一个数组,可能是多维的,里面有些值带有特殊符号 比如" 我用递归加addslashes()转义 没有达到效果 帮忙看看哪错了 $arr=array('ii"',array('o ...

  2. php 递归删除函数

    2019独角兽企业重金招聘Python工程师标准>>> 递归函数为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函 ...

  3. matplotlib.pyplot绘制函数图像希腊字母latex效果设置

    matplotlib.pyplot绘制函数图像希腊字母latex效果设置 用matplotlib绘制函数图像时,有时候为了图形的含义更加清晰明了,需要在函数图形的备注上标明函数表达式,此时往往涉及到用 ...

  4. plsql(轻量版)-存储函数存储过程

    ORACLE提供可以把PL/SQL程序存储在数据库中,并可以在任何地方运行他,这样就叫做存储过程或者函数,意思就说白了,就是你之前写的select,什么update,这些东西存储起来,我想把这些操作存 ...

  5. C语言多个变量运算存储过程,postgresql函数中的赋值运算和postgresql函数存储过程实现数据批量插入...

    今天检查大家写的postgresql函数时,发现有的家伙不遵守postgresql关于函数中的赋值运算表示方式: variable := value 注意的是,是:=表示赋值运算,而不是单独一个等号. ...

  6. oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包

    认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命 ...

  7. PostgreSQL函数(存储过程)----笔记

    PostgreSQL函数(存储过程)----笔记 PostgreSQL 函数也称为 PostgreSQL 存储过程. PostgreSQL 函数或存储过程是存储在数据库服务器上并可以使用SQL界面调用 ...

  8. Java -- JDBC 学习--调用函数存储过程

    调用函数&存储过程 /*** 如何使用 JDBC 调用存储在数据库中的函数或存储过程*/@Testpublic void testCallableStatment() {Connection ...

  9. python函数可以递归调用吗_递归调用函数

    我有10张,20张,50张钞票,当我需要支付任何金额时,我需要找到最好的组合.例如,当我需要付7英镑时,我会付5英镑和2英镑的钞票 我有一个函数可以计算这个.但我需要运行同一个函数3到4次,如下所示. ...

  10. python生成递归json_python函数、递归、json模块操作

    一.修改文件 修改文件方法:简单粗暴直接,步骤以下: #1.打开一个文件,获取到文件的内容 #2.对内容进行修改 #3.清空文件的内容 #4.把新的内容写入到文件 代码示例: f=open('user ...

最新文章

  1. python开源商城_Leaf - 一个开发友好、功能完备的开源微信商城框架
  2. Win10 | Mac 在server上统一办公
  3. Hadoop HDFS copyMergeFromLocal
  4. vivado与modelsim的联合仿真(二)
  5. echarts用法配置
  6. 干货|基于 Spring Cloud 的微服务落地
  7. Python对自定义离散点进行指定多项式函数拟合
  8. 【CodeForces - 294B】Shaass and Bookshelf(枚举,贪心,思维,组内贪心组间dp)
  9. leetcode338 比特位计数
  10. c语言课程设计2018,C语言课程设计报告(2018)——学生管理系统(17页)-原创力文档...
  11. JS-面向对象-函数的使用场景---作为其他变量的值 / 作为对象的属性值 / 作为其他函数的参数 / 作为其他函数的返回值 / 作为构造函数(定义对象)
  12. 英特尔宣布推出锐炫 A 系列移动端独立显卡
  13. 基于django的视频点播网站开发-step9-后台视频管理功能
  14. CLR via C# 读书笔记 3-6 比较APM和EAP(异步编程模型和基于事件的编程模式)
  15. SSM小区停车场管理系统
  16. 苹果台式机怎么设置我的电脑计算机,台式苹果电脑自己怎样做系统
  17. 抽象工厂模式简单实例
  18. 如何设置路由器的中继模式-机器人局域网组网攻略
  19. Win实用 优秀 软件清单推荐
  20. PCB的安装与元器件的绘制

热门文章

  1. web压测工具http_load原理分析
  2. RDD, DataFrame or Dataset
  3. 个人成长:2021年中随想记
  4. Elasticsearch实现原理分析
  5. Java Serializable:明明就一个空的接口嘛
  6. Elasticsearch检索分类详解
  7. Linux基础命令---comm
  8. 网站前端和后台性能优化24
  9. 如何用 Gitlab 做团队内的 Code Review
  10. PHP防SQL注入攻击