SQL函数的种类很多,实现的功能也不太一样。下面为您介绍的是用于遍历BOM表的SQL函数,希望可以让您对SQL函数有更多的了解。

成都创新互联欢迎咨询:18980820575,为您提供成都网站建设网页设计及定制高端网站建设服务,成都创新互联网页制作领域10多年,包括成都混凝土搅拌站等多个行业拥有丰富的网站维护经验,选择成都创新互联,为企业锦上添花。
表结构如下:
 ptype subptype amount
 a  a.120
 a  a.2 15
 a  a.3 10
 a. 1 a.1.1 20
 a.1a.1.2  15
 a.1 a.1.330
 a.2 a.2.110
 a.2 a.2.2 20
 a.1.1 a.1.1.1 45
 a.1.1 a.1.1.2 15
 a.2.1 a.2.1.1 20
 a.2.2 a.2.2.1 13
- create table matgroup(parentgroup varchar(50),childgroup varchar(50), mount float)
 - insert into matgroup
 - select 'a', 'a.1',20
 - union select 'a', 'a.2', 15
 - union select 'a', 'a.3', 10
 - union select 'a.1', 'a.1.1', 20
 - union select 'a.1','a.1.2', 15
 - union select 'a.1', 'a.1.3',30
 - union select 'a.2', 'a.2.1',10
 - union select 'a.2', 'a.2.2', 20
 - union select 'a.1.1', 'a.1.1.1', 45
 - union select 'a.1.1', 'a.1.1.2', 15
 - union select 'a.2.1' ,'a.2.1.1', 20
 - union select 'a.2.2', 'a.2.2.1', 13
 
函数如下:
- create FUNCTION fn_aaa (@matgroup varchar(50),@mount int )
 - RETURNS @retPLExpand TABLE (parentgroup varchar(50),childgroup varchar(50), mount float)
 - AS
 - BEGIN
 - DECLARE @RowsAdded int
 - declare @PLExpand Table (parentgroup varchar(50),childgroup varchar(50), mount float,processed tinyint default(0))
 - INSERT @PLExpand
 - SELECT b.parentgroup,b.childgroup, @mount*b.mount, 0
 - FROM matgroup b
 - WHERE b.parentgroup=@matgroup
 - SET @RowsAdded = @@rowcount
 - -- While new employees were added in the previous iteration
 - WHILE @RowsAdded > 0
 - BEGIN
 - /*Mark all employee records whose direct reports are going to be
 - found in this iteration with processed=1.*/
 - UPDATE @PLExpand
 - SET processed = 1
 - WHERE processed = 0
 - -- Insert employees who report to employees marked 1.
 - INSERT @PLExpand
 - SELECT a.parentgroup,a.childgroup,a.mount*b.mount , 0
 - FROM matgroup a inner join @PLExpand b on a.parentgroup=b.childgroup
 - where b.processed = 1
 - SET @RowsAdded = @@rowcount
 - /*Mark all employee records whose direct reports have been found
 - in this iteration.*/
 - UPDATE @PLExpand
 - SET processed = 2
 - WHERE processed = 1
 - END
 - -- copy to the result of the function the required columns
 - INSERT @retPLExpand
 - SELECT parentgroup,childgroup,mount
 - FROM @PLExpand
 - RETURN
 - END
 
调用方法如下:
 select * from fn_aaa('a.1')
 意思是找出a.1下的所有儿子及孙子.
  
【编辑推荐】
动态sql中使用临时表的实例
Oracle存储过程使用动态SQL
SQL Server删除视图的两种方法
SQL Server视图的使用
sql server表格变量的用法
                网站标题:遍历BOM表的SQL函数
                
                标题来源:http://www.csdahua.cn/qtweb/news4/272104.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网