树形数据深度排序处理示例(递归法).sql
CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))
INSERT tb SELECT '001',NULL ,'山东省'
UNION ALL SELECT '002','001','烟台市'
UNION ALL SELECT '004','002','招远市'
UNION ALL SELECT '003','001','青岛市'
UNION ALL SELECT '005',NULL ,'四会市'
UNION ALL SELECT '006','005','清远市'
UNION ALL SELECT '007','006','小分市'
GO
--广度搜索排序函数
CREATE FUNCTION f_Sort(@ID char(3)=NULL,@sort int=1)
RETURNS @t_Level TABLE(ID char(3),sort int)
AS
BEGIN
DECLARE tb CURSOR LOCAL
FOR
SELECT ID FROM tb
WHERE PID=@ID
OR(@ID IS NULL AND PID IS NULL)
OPEN TB
FETCH tb INTO @ID
WHILE @@FETCH_STATUS=0
BEGIN
INSERT @t_Level VALUES(@ID,@sort)
SET @sort=@sort+1
IF @@NESTLEVEL<32 --如果递归层数未超过32层(递归最大允许32层)
BEGIN
--递归查找当前节点的子节点
INSERT @t_Level SELECT * FROM f_Sort(@ID,@sort)
SET @sort=@sort+@@ROWCOUNT --排序号加上子节点个数
END
FETCH tb INTO @ID
END
RETURN
END
GO
--显示结果
SELECT a.*
FROM tb a,f_Sort(DEFAULT,DEFAULT) b
WHERE a.ID=b.ID
ORDER BY b.sort
/*--结果
ID PID Name
------ --------- ----------
001 NULL 山东省
002 001 烟台市
004 002 招远市
003 001 青岛市
005 NULL 四会市
006 005 清远市
007 006 小分市
--*/
转载于:https://www.cnblogs.com/shihao/archive/2012/06/02/2531890.html
树形数据深度排序处理示例(递归法).sql相关推荐
- 树形数据深度排序处理示例(模拟单编号法).sql
--测试数据 DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10)) INSERT @t SELECT '001',NULL ,'山东省' ...
- c语言递归方法排序,归并排序,递归法,C语言实现。
利用归并排序法对序列排序的示意图(递归法): 一.算法分析:利用递归的分治方法:1.将原序列细分,直到成为单个元素:2.在将分割后的序列一层一层地按顺序合并,完成排序.细分通过不断深入递归完成,合并通 ...
- mysql分组排列的查询语句_数据的排序与分组语句_MySQL
bitsCN.com 数据的排序与分组语句 使用SQL语句执行查询操作时,我们可能发现查询出的数据结果的排序是无序的.为了更好的观察数据表中的查询结果,开发人员或者用户经常要对查询的数据进行排序操作, ...
- 二叉树的最小深度——递归法、迭代法
1题目 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明:叶子节点是指没有子节点的节点. 示例 1: 输入:root = [3,9,20,null,nu ...
- 基于深度法向约束的稀疏雷达数据深度补全(商汤科技和香港大学联合提出)
作者:Tom Hardy Date:2020-02-09 来源:基于深度法向约束的稀疏雷达数据深度补全(商汤科技和香港大学联合提出)
- python递归合并排序_python 归并排序的递归法与迭代法(利用队列)实现,以及性能测试...
递归排序核心 递归排序的核心是 分与合 分的最终结果 就是将原数组中每一个数字分作一个数组, 合就是 所有小数组不断排序,合并的过程. 合并的过程是先将两个含有一个数字的数组排序,合并(每次比较两个数 ...
- 《剑指offer》求二叉树的最小深度(非递归法)
题目:求二叉树的最小深度(实际上该题来自leetcode) 解析:递归法简单些,下面演示下非递归.无外乎层次遍历二叉树了,思想是用current记录当前层的节点数,next记录下一层的节点数,用队列保 ...
- 递归法求二叉树的深度
想要计算一个二叉树的深度,我们先可以拆成求根结点的左右子树的深度:而根结点的左右子树的深度又可拆成求根左结点的左右子树深度和根右结点的左右子树的深度.这样一层一层给套下去,很容易想到递归. 明确每一步 ...
- C语言随机生成成绩排序,如何实现以下功能给出1000个通过随机数生成的数据,分别用直接插入排序法、冒泡排序法、快速排序法进行排序...
已结贴√ 问题点数:20 回复次数:2 如何实现以下功能给出1000个通过随机数生成的数据,分别用直接插入排序法.冒泡排序法.快速排序法进行排序 #include #include #include ...
最新文章
- JS操作Excel读取和写入(模板操作)
- 【线上分享】华为云视频Cloud Native架构及工程实践
- QT中的模态对话框及非模态对话框
- “横平竖直”进行连线+将相邻框进行合并
- 最佳圆角字体,设计师的最爱
- Veeam FAQ系列转载(二)
- 高性能 socket 框架
- 基础总结篇之三:Activity的task相关
- java计算器用什么布局_求JAVA语言写的计算器的代码。用GridLayout布局。
- 在idea中配置jetty
- ue4模型为啥这么亮_UE4中的HLOD和Proxy
- word如何添加艺术字体
- 记一次m3u8文件转mp4的经历
- Tableau:如何添加参考线、趋势线、参考区间、分布区间、盒须图?
- IntelliJ IDEA运行JAVA
- 数据治理分析项目最佳实践
- Nautre综述:鸟枪法宏基因组-从取样到数据分析(2)2万字带你系统入门宏基因组实验和分析...
- 蓝桥杯: Cowboys
- tools1.0.0
- 一个 SPI 转串口驱动的优化