递归用函数、存储过程实现的效果
--測試
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
递归用函数、存储过程实现的效果相关推荐
- php addslashes 数组,用递归addslashes函数转义数组
有个一个数组,可能是多维的,里面有些值带有特殊符号 比如" 我用递归加addslashes()转义 没有达到效果 帮忙看看哪错了 $arr=array('ii"',array('o ...
- php 递归删除函数
2019独角兽企业重金招聘Python工程师标准>>> 递归函数为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函 ...
- matplotlib.pyplot绘制函数图像希腊字母latex效果设置
matplotlib.pyplot绘制函数图像希腊字母latex效果设置 用matplotlib绘制函数图像时,有时候为了图形的含义更加清晰明了,需要在函数图形的备注上标明函数表达式,此时往往涉及到用 ...
- plsql(轻量版)-存储函数存储过程
ORACLE提供可以把PL/SQL程序存储在数据库中,并可以在任何地方运行他,这样就叫做存储过程或者函数,意思就说白了,就是你之前写的select,什么update,这些东西存储起来,我想把这些操作存 ...
- C语言多个变量运算存储过程,postgresql函数中的赋值运算和postgresql函数存储过程实现数据批量插入...
今天检查大家写的postgresql函数时,发现有的家伙不遵守postgresql关于函数中的赋值运算表示方式: variable := value 注意的是,是:=表示赋值运算,而不是单独一个等号. ...
- oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包
认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命 ...
- PostgreSQL函数(存储过程)----笔记
PostgreSQL函数(存储过程)----笔记 PostgreSQL 函数也称为 PostgreSQL 存储过程. PostgreSQL 函数或存储过程是存储在数据库服务器上并可以使用SQL界面调用 ...
- Java -- JDBC 学习--调用函数存储过程
调用函数&存储过程 /*** 如何使用 JDBC 调用存储在数据库中的函数或存储过程*/@Testpublic void testCallableStatment() {Connection ...
- python函数可以递归调用吗_递归调用函数
我有10张,20张,50张钞票,当我需要支付任何金额时,我需要找到最好的组合.例如,当我需要付7英镑时,我会付5英镑和2英镑的钞票 我有一个函数可以计算这个.但我需要运行同一个函数3到4次,如下所示. ...
- python生成递归json_python函数、递归、json模块操作
一.修改文件 修改文件方法:简单粗暴直接,步骤以下: #1.打开一个文件,获取到文件的内容 #2.对内容进行修改 #3.清空文件的内容 #4.把新的内容写入到文件 代码示例: f=open('user ...
最新文章
- python开源商城_Leaf - 一个开发友好、功能完备的开源微信商城框架
- Win10 | Mac 在server上统一办公
- Hadoop HDFS copyMergeFromLocal
- vivado与modelsim的联合仿真(二)
- echarts用法配置
- 干货|基于 Spring Cloud 的微服务落地
- Python对自定义离散点进行指定多项式函数拟合
- 【CodeForces - 294B】Shaass and Bookshelf(枚举,贪心,思维,组内贪心组间dp)
- leetcode338 比特位计数
- c语言课程设计2018,C语言课程设计报告(2018)——学生管理系统(17页)-原创力文档...
- JS-面向对象-函数的使用场景---作为其他变量的值 / 作为对象的属性值 / 作为其他函数的参数 / 作为其他函数的返回值 / 作为构造函数(定义对象)
- 英特尔宣布推出锐炫 A 系列移动端独立显卡
- 基于django的视频点播网站开发-step9-后台视频管理功能
- CLR via C# 读书笔记 3-6 比较APM和EAP(异步编程模型和基于事件的编程模式)
- SSM小区停车场管理系统
- 苹果台式机怎么设置我的电脑计算机,台式苹果电脑自己怎样做系统
- 抽象工厂模式简单实例
- 如何设置路由器的中继模式-机器人局域网组网攻略
- Win实用 优秀 软件清单推荐
- PCB的安装与元器件的绘制