1. if object_id('[tb]') is not null drop table [tb]
  2. go
  3. create table [tb]([modeid] int,modename varchar(20),parentid int)
  4. insert [tb]
  5. select 100 ,N'商品管理', 0 union all
  6. select 101 ,N'定单管理', 0 union all
  7. select 102 ,N'用户管理', 0 union all
  8. select 104 ,N'学院广告', 0 union all
  9. select 105 ,N'系统设置', 0 union all
  10. select 106 ,N'附件管理', 0 union all
  11. select 107 ,N'商品管理', 100 union all
  12. select 108 ,N'明细管理', 100 union all
  13. select 109 ,N'物流管理', 100 union all
  14. select 110 ,N'商品信息管理', 107 union all
  15. select 111 ,N'商品分类管理', 107 union all
  16. select 112 ,N'回收站管理', 107 union all
  17. select 114 ,N'团购管理', 108 union all
  18. select 115 ,N'拍卖管理', 108 union all
  19. select 116 ,N'优惠管理', 108 union all
  20. select 117 ,N'会员管理', 102 union all
  21. select 118 ,N'会员卡管理', 102 union all
  22. select 119 ,N'资金管理', 102 union all
  23. select 120 ,N'管理员管理', 102 union all
  24. select 121 ,N'添加管理员', 120 union all
  25. select 122 ,N'修改管理员', 120
  26. go
  27.  
  28. SELECT * FROM tb
  29.  
  30. --查所有子结点
  31. if object_id('f_getC') is not null drop function f_getC
  32. go
  33. create function f_getC(@id int)
  34. returns @re table(id int,level int,sort varchar(10))
  35. as
  36. begin
  37. declare @l int
  38. set @l=0
  39. insert @re select @id,@l,null
  40. while @@rowcount>0
  41. begin
  42. set @l=@l+1
  43. insert @re
  44. select a.modeid,@l,ltrim(isnull(b.sort,a.modeid))
  45. from tb as a,@re as b
  46. where b.id=a.parentid and b.level=@l-1
  47. END
  48.  
  49. -- update @re set level = level -1
  50.  
  51. return
  52. end
  53. go
  54.  
  55. select a.modeid,a.parentid,REPLICATE(' ',b.level) +'┝'+a.modename,b.level,b.sort from tb a,f_getC(100) b
  56. where a.modeid=b.id
  57. order by b.sort,b.LEVEL,case when b.level<2 then 0 else 1 end
  58.  
  59. /*
  60. modeid parentid sort level
  61. ----------- ----------- -------------------------------------------------- ---------- -----------
  62. 100 0 ┝商品管理 100 0
  63. 107 100 ┝商品管理 100 1
  64. 108 100 ┝明细管理 100 1
  65. 109 100 ┝物流管理 100 1
  66. 101 0 ┝定单管理 101 0
  67. 102 0 ┝用户管理 102 0
  68. 117 102 ┝会员管理 102 1
  69. 118 102 ┝会员卡管理 102 1
  70. 119 102 ┝资金管理 102 1
  71. 120 102 ┝管理员管理 102 1
  72. 104 0 ┝学院广告 104 0
  73. 105 0 ┝系统设置 105 0
  74. 106 0 ┝附件管理 106 0
  75. 110 107 ┝商品信息管理 100 2
  76. 111 107 ┝商品分类管理 100 2
  77. 112 107 ┝回收站管理 100 2
  78. 114 108 ┝团购管理 100 2
  79. 115 108 ┝拍卖管理 100 2
  80. 116 108 ┝优惠管理 100 2
  81. 121 120 ┝添加管理员 102 2
  82. 122 120 ┝修改管理员 102 2
  83.  
  84. (所影响的行数为 21 行)
  85.  
  86. */
  87.  
  88. --查所有子结点,带路径与排序
  89. if object_id('f_getC') is not null drop function f_getC
  90. go
  91. create function f_getC(@id int)
  92. returns @re table(id int,level int,sort varchar(100),path varchar(500))
  93. as
  94. begin
  95. declare @l int
  96. set @l=0
  97. insert @re
  98. select [modeid],@l,right(''+ltrim(modeid),5),modename
  99. from tb where parentid=@id
  100. while @@rowcount>0
  101. begin
  102. set @l=@l+1
  103. insert @re
  104. select a.modeid,@l,b.sort+right(''+ltrim(a.modeid),5),
  105. b.path+' - '+a.modename
  106. from tb as a,@re as b
  107. where b.id=a.parentid and b.level=@l-1
  108. end
  109. update @re set level = level
  110. return
  111. end
  112. go
  113.  
  114. select a.modeid,a.parentid,REPLICATE(' ',b.level) +'┝'+a.modename,b.level,b.sort ,b.path from tb a,f_getC(0) b
  115. where a.modeid=b.id
  116. order by sort
  117.  
  118. /*
  119. modeid parentid level
  120. ----------- ----------- -------------------- ----------- -------------------- ----------------------------------------
  121. 100 0 ┝商品管理 0 00100 商品管理
  122. 107 100 ┝商品管理 1 0010000107 商品管理 - 商品管理
  123. 110 107 ┝商品信息管理 2 001000010700110 商品管理 - 商品管理 - 商品信息管理
  124. 111 107 ┝商品分类管理 2 001000010700111 商品管理 - 商品管理 - 商品分类管理
  125. 112 107 ┝回收站管理 2 001000010700112 商品管理 - 商品管理 - 回收站管理
  126. 108 100 ┝明细管理 1 0010000108 商品管理 - 明细管理
  127. 114 108 ┝团购管理 2 001000010800114 商品管理 - 明细管理 - 团购管理
  128. 115 108 ┝拍卖管理 2 001000010800115 商品管理 - 明细管理 - 拍卖管理
  129. 116 108 ┝优惠管理 2 001000010800116 商品管理 - 明细管理 - 优惠管理
  130. 109 100 ┝物流管理 1 0010000109 商品管理 - 物流管理
  131. 101 0 ┝定单管理 0 00101 定单管理
  132. 102 0 ┝用户管理 0 00102 用户管理
  133. 117 102 ┝会员管理 1 0010200117 用户管理 - 会员管理
  134. 118 102 ┝会员卡管理 1 0010200118 用户管理 - 会员卡管理
  135. 119 102 ┝资金管理 1 0010200119 用户管理 - 资金管理
  136. 120 102 ┝管理员管理 1 0010200120 用户管理 - 管理员管理
  137. 121 120 ┝添加管理员 2 001020012000121 用户管理 - 管理员管理 - 添加管理员
  138. 122 120 ┝修改管理员 2 001020012000122 用户管理 - 管理员管理 - 修改管理员
  139. 104 0 ┝学院广告 0 00104 学院广告
  140. 105 0 ┝系统设置 0 00105 系统设置
  141. 106 0 ┝附件管理 0 00106 附件管理
  142.  
  143. (21 行受影响)
  144.  
  145. */
  146.  
  147. --------

sql 泡沫 或者 递归查询的更多相关文章

  1. SQL Server CTE 递归查询全解

    在TSQL脚本中,也能实现递归查询,SQL Server提供CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询,本文详细介绍CTE递归调用的特性和使用示例 ...

  2. SQL Server CTE 递归查询全解 -- 转 学习

    在TSQL脚本中,也能实现递归查询,SQL Server提供CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询,本文详细介绍CTE递归调用的特性和使用示例 ...

  3. SQL Server CTE 递归查询全解(转载)

    在TSQL脚本中,也能实现递归查询,SQL Server提供CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询,本文详细介绍CTE递归调用的特性和使用示例 ...

  4. SQL Server 实现递归查询

    基础数据/表结构                 Sql 语句 ;With cte(id,pid,TName)As ( Select id,pid,TName Union All Select B.i ...

  5. T-SQL with as 的用法(转) SQL 下的递归查询 SQL2005(CTE) ,SQL2000(Function 递归)

    摘自: http://blog.csdn.net/bluefoxev/article/details/6779794 ------- SQL2005 方法 一.WITH AS的含义     WITH ...

  6. sql实际应用-递归查询

    1.既然要谈到sql,数据库表是必须的 2.数据结构     3.获取某个节点的所有子节点     传统的写法(sql2000) 很麻烦,暂且就不写了     来看看CTE的写法 CREATE PRO ...

  7. LINQ TO SQL 实现无限递归查询

    from:http://blog.csdn.net/q107770540/article/list 见论坛内有网友提问类似的问题已经不止一次了, 现总结一下,希望能给以后再碰到此类问题的朋友一些帮助  ...

  8. SQL SERVER递归查询

    SQL SERVER 进行递归查询 有如下数据表

  9. MS SQL Server递归查询

    原文:MS SQL Server递归查询 刚才在论坛上看到网友一个要求.参考如下,Insus.NET分析一下,可以使用MS SQL Server的递归查询,得到结果.准备一张表: 根据网友提供的数据, ...

随机推荐

  1. [转]Valgrind简单用法

    [转]Valgrind简单用法 http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html Valgrind的主要作者Julian S ...

  2. 触摸屏校准tslib的配置文件

    ./autogen.sh#sleep 10./configure --prefix=/usr/lxl/tslib --host=arm-linux CC=arm-linux-gcc#sleep 100 ...

  3. C++变量的存储类别与作用域

    总结一下C++中变量的存储类别以及变量的作用域. (1)标示符的存储类别决定了标示符在内存中存在的时间(我们可以理解标示符就是确定一个变量的符号,也就是我们所说的变量名) 二:存储类别 (1)静态存储 ...

  4. P3383: [Usaco2004 Open]Cave Cows 4 洞穴里的牛之四

    这个系列总算是做完了,这是我第一次高效率做完四道题,虽然中间有两道水题,但是第一和第四题还是蛮好的,但是只要能想到思路就很快能打完的. 像这道题,刚开始在想能不能用DP?但是苦于不知道怎么实施,后来又 ...

  5. [SSH服务]——一个SSH无密码登陆实验

    实验拓扑图 实验描述 机房内有两台服务器: (1)B服务器10.0.10.158,充当Web服务器,有普通用户user_00 (2)C服务器10.0.10.191,充当Mysql服务器,有普通用户us ...

  6. 将SQLServer结果导出为excel文件

    相信大家常常会遇到将SqlServer查询结果导出到Excel的问题.如果导出的次数少,直接“Save Results As...”就是了:但是当要分别在每个表取样,那就相当麻烦了.今天就为大家提供一 ...

  7. “我爱淘”冲刺阶段Scrum站立会议5

    完成任务: 由于我们的思路做了些改变,重新设计了界面的布局. 计划任务: 实现数据库的链接,将页面布局完善. 遇到问题: 使用webservice对数据的提取

  8. 四则运算出题器(c++)

    一.设计思路 这次版本加入了一下功能: 可定制题目的数量:修改循环次数: 可以定制每行打印的题目数和行间距的大小(当前题目序号可以整除定制数时输出输入的行间距个换行符): 可以定制算式的范围(修改随机 ...

  9. 不会JS中的OOP,你也太菜了吧!(第二篇)

    一.你必须知道的 1> 原型及原型链在继承中起到了关键的作用.所以你一定要理解他们.2> 不会JS中的OOP,你也太菜了吧!(第一篇) 二.继承的6种方法 1> 原型链继承 原型链继 ...

  10. How to Build FFmpeg for Android

    http://www.roman10.net/how-to-build-ffmpeg-for-android/ ffmpeg is an open-source platform for record ...