--测试数据
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相关推荐

  1. 树形数据深度排序处理示例(模拟单编号法).sql

    --测试数据 DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10)) INSERT @t SELECT '001',NULL ,'山东省' ...

  2. c语言递归方法排序,归并排序,递归法,C语言实现。

    利用归并排序法对序列排序的示意图(递归法): 一.算法分析:利用递归的分治方法:1.将原序列细分,直到成为单个元素:2.在将分割后的序列一层一层地按顺序合并,完成排序.细分通过不断深入递归完成,合并通 ...

  3. mysql分组排列的查询语句_数据的排序与分组语句_MySQL

    bitsCN.com 数据的排序与分组语句 使用SQL语句执行查询操作时,我们可能发现查询出的数据结果的排序是无序的.为了更好的观察数据表中的查询结果,开发人员或者用户经常要对查询的数据进行排序操作, ...

  4. 二叉树的最小深度——递归法、迭代法

    1题目 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明:叶子节点是指没有子节点的节点. 示例 1: 输入:root = [3,9,20,null,nu ...

  5. 基于深度法向约束的稀疏雷达数据深度补全(商汤科技和香港大学联合提出)

    作者:Tom Hardy Date:2020-02-09 来源:基于深度法向约束的稀疏雷达数据深度补全(商汤科技和香港大学联合提出)

  6. python递归合并排序_python 归并排序的递归法与迭代法(利用队列)实现,以及性能测试...

    递归排序核心 递归排序的核心是 分与合 分的最终结果 就是将原数组中每一个数字分作一个数组, 合就是 所有小数组不断排序,合并的过程. 合并的过程是先将两个含有一个数字的数组排序,合并(每次比较两个数 ...

  7. 《剑指offer》求二叉树的最小深度(非递归法)

    题目:求二叉树的最小深度(实际上该题来自leetcode) 解析:递归法简单些,下面演示下非递归.无外乎层次遍历二叉树了,思想是用current记录当前层的节点数,next记录下一层的节点数,用队列保 ...

  8. 递归法求二叉树的深度

    想要计算一个二叉树的深度,我们先可以拆成求根结点的左右子树的深度:而根结点的左右子树的深度又可拆成求根左结点的左右子树深度和根右结点的左右子树的深度.这样一层一层给套下去,很容易想到递归. 明确每一步 ...

  9. C语言随机生成成绩排序,如何实现以下功能给出1000个通过随机数生成的数据,分别用直接插入排序法、冒泡排序法、快速排序法进行排序...

    已结贴√ 问题点数:20 回复次数:2 如何实现以下功能给出1000个通过随机数生成的数据,分别用直接插入排序法.冒泡排序法.快速排序法进行排序 #include #include #include ...

最新文章

  1. JS操作Excel读取和写入(模板操作)
  2. 【线上分享】华为云视频Cloud Native架构及工程实践
  3. QT中的模态对话框及非模态对话框
  4. “横平竖直”进行连线+将相邻框进行合并
  5. 最佳圆角字体,设计师的最爱
  6. Veeam FAQ系列转载(二)
  7. 高性能 socket 框架
  8. 基础总结篇之三:Activity的task相关
  9. java计算器用什么布局_求JAVA语言写的计算器的代码。用GridLayout布局。
  10. 在idea中配置jetty
  11. ue4模型为啥这么亮_UE4中的HLOD和Proxy
  12. word如何添加艺术字体
  13. 记一次m3u8文件转mp4的经历
  14. Tableau:如何添加参考线、趋势线、参考区间、分布区间、盒须图?
  15. IntelliJ IDEA运行JAVA
  16. 数据治理分析项目最佳实践
  17. Nautre综述:鸟枪法宏基因组-从取样到数据分析(2)2万字带你系统入门宏基因组实验和分析...
  18. 蓝桥杯: Cowboys
  19. tools1.0.0
  20. 一个 SPI 转串口驱动的优化

热门文章

  1. Android vector标签 PathData 画图超详解
  2. Algs4-1.5.4给出id[]和sz[]的内容与次数
  3. Python学习笔记010——作用域
  4. 关于XAMPP环境配置
  5. 【Java】StopWatch任务执行时间监视器
  6. GString及IntelliJIdea中调试Groovy的操作步骤
  7. ·记2014.5.16的一件小事
  8. linux构建web主机
  9. jenkins与gitlab集成,分支提交代码后自动构建任务(六)
  10. 前嗅ForeSpider中数据采集界面介绍