SQL Server 2000中处理树形结构的三个用户自定义函数
来源:互联网 发布:珠海精实测控 知乎 编辑:程序博客网 时间:2024/04/29 19:25
CREATE FUNCTION dbo.udf_GetLeaf_1
(
@bprod AS NVARCHAR(15)
)
RETURNS @temp_mbm TABLE (bprod NVARCHAR(15))
AS
BEGIN
DECLARE @temp_mbm_1 TABLE (LEVEL INT,bprod NVARCHAR(15),childrenCount INT)
DECLARE @level INT
DECLARE @row INT
SET @level=0
--插入第一笔数据
INSERT INTO @temp_mbm_1(LEVEL,bprod,childrenCount)
SELECT @level,@bprod,COUNT(*)
FROM mbm
WHERE bprod=@bprod
SET @row=@@rowcount
WHILE @row>0
BEGIN
SET @level=@level+1
--取得当前层次的所有有孩子的料号的子料号
--以及它们的和每个子料号的子料数
INSERT INTO @temp_mbm_1(LEVEL,bprod,childrenCount)
SELECT @level,bchld,(SELECT COUNT(*) FROM mbm x WHERE x.bprod=y.bchld)
FROM mbm y
WHERE bprod IN (SELECT bprod FROM @temp_mbm_1 WHERE childrenCount>0)
SET @row=@@rowcount
--删除已经取了孩子的非叶子料号
DELETE FROM @temp_mbm_1
WHERE level=@level-1
AND childrenCount>0
END
INSERT INTO @temp_mbm SELECT bprod FROM @temp_mbm_1
RETURN
END
CREATE FUNCTION dbo.udf_GetRoot_1
(
@bchld AS NVARCHAR(15)
)
RETURNS @temp_mbm TABLE (bprod NVARCHAR(15))
AS
BEGIN
DECLARE @temp_mbm_1 TABLE (LEVEL INT,bprod NVARCHAR(15),fatherCount INT)
DECLARE @level INT
DECLARE @row INT
SET @level=0
--插入第一笔数据
INSERT INTO @temp_mbm_1(LEVEL,bprod,fatherCount)
SELECT @level,@bchld,COUNT(*)
FROM mbm
WHERE bchld=@bchld
SET @row=@@rowcount
WHILE @row>0
BEGIN
SET @level=@level+1
--取得当前层次的有父亲的所有节点的父节点
--以及它们的父节点的父节点数
INSERT INTO @temp_mbm_1(LEVEL,bprod,fatherCount)
SELECT @level,bprod,(SELECT COUNT(*) FROM mbm x WHERE x.bchld=y.bprod)
FROM mbm y
WHERE bchld IN (SELECT bprod FROM @temp_mbm_1 WHERE fatherCount>0)
SET @row=@@rowcount
--删除已经取过了父节点的非根节点
DELETE FROM @temp_mbm_1
WHERE level=@level-1
AND fatherCount>0
END
INSERT INTO @temp_mbm SELECT bprod FROM @temp_mbm_1
RETURN
END
CREATE FUNCTION dbo.udf_GetSubTreeDepth_1
(
@bprod AS NVARCHAR(15)
)
RETURNS @temp_mbm TABLE (LEVEL INT,ItemCount INT,LeafCount INT,BranchCount INT)
AS
BEGIN
DECLARE @temp_mbm_1 TABLE (LEVEL INT,bprod NVARCHAR(15),childrenCount INT)
DECLARE @level INT
DECLARE @row INT
SET @level=0
--插入第一笔数据
INSERT INTO @temp_mbm_1(LEVEL,bprod,childrenCount)
SELECT @level,@bprod,COUNT(*)
FROM mbm
WHERE bprod=@bprod
SET @row=@@rowcount
WHILE @row>0
BEGIN
--取得层次的节点总数,其中的叶节点总数,非叶节点总数
INSERT INTO @temp_mbm(LEVEL,ItemCount,LeafCount,BranchCount)
SELECT LEVEL,COUNT(*),
SUM(CASE WHEN childrenCount=0 THEN 1 ELSE 0 END) AS LeafCount,
SUM(CASE WHEN childrenCount>0 THEN 1 ELSE 0 END) AS BranchCount
FROM @temp_mbm_1
WHERE level=@level
GROUP BY LEVEL
SET @level=@level+1
--取得当前层次的所有有子节点的节点的所有子节点
--以及这些子节点的子节点数
INSERT INTO @temp_mbm_1(LEVEL,bprod,childrenCount)
SELECT @level,bchld,(SELECT COUNT(*) FROM mbm x WHERE x.bprod=y.bchld)
FROM mbm y
WHERE bprod IN (SELECT bprod FROM @temp_mbm_1 WHERE childrenCount>0)
SET @row=@@rowcount
--删除已经取过子节点的节点
DELETE FROM @temp_mbm_1
WHERE level=@level-1
AND childrenCount>0
END
RETURN
END
- SQL Server 2000中处理树形结构的三个用户自定义函数
- SQL Server用户自定义函数
- SQL Server用户自定义函数
- SQL Server用户自定义函数
- SQL Server用户自定义函数
- SQL Server--用户自定义函数
- SQL Server 中树形表数据的处理总结
- SQL中利用递归函数取树形结构的数据
- [转载]SQL Server用户自定义函数中如何使用Getdate()
- SQL SERVER 关于树形排序的处理
- SQL Server 的三种用户自定义函数
- SQL SERVER用户自定义函数的创建和使用
- SQL SERVER 用户自定义函数使用限制
- SQL Server中的用户自定义函数
- SQL Server UDF用户自定义函数
- sql server中自定义函数
- SQL 中树形结构查询的运用
- 自定义函数。用户自定义函数(User Defined Functions)SQL Server 2000
- 测试
- eclipse on server.
- STL,Loki和Boost中Functor的比较(-)
- Java 线程综合述
- TopCoder SRM 281
- SQL Server 2000中处理树形结构的三个用户自定义函数
- 重装系统后修复受损的FlashGet(测试可用)
- Why don't we use a constructor instead of factory method?
- PO部分常用table 总结 PO01A(采购单)sql 语句
- 有点懒
- 文件(文件夹)删除拷贝操作类
- 我收藏的文章
- TopCoder SRM285 -- My Solution
- MDI-II、MDI-X与双绞线线序