sql 泡沫 或者 递归查询
- if object_id('[tb]') is not null drop table [tb]
- go
- create table [tb]([modeid] int,modename varchar(20),parentid int)
- insert [tb]
- select 100 ,N'商品管理', 0 union all
- select 101 ,N'定单管理', 0 union all
- select 102 ,N'用户管理', 0 union all
- select 104 ,N'学院广告', 0 union all
- select 105 ,N'系统设置', 0 union all
- select 106 ,N'附件管理', 0 union all
- select 107 ,N'商品管理', 100 union all
- select 108 ,N'明细管理', 100 union all
- select 109 ,N'物流管理', 100 union all
- select 110 ,N'商品信息管理', 107 union all
- select 111 ,N'商品分类管理', 107 union all
- select 112 ,N'回收站管理', 107 union all
- select 114 ,N'团购管理', 108 union all
- select 115 ,N'拍卖管理', 108 union all
- select 116 ,N'优惠管理', 108 union all
- select 117 ,N'会员管理', 102 union all
- select 118 ,N'会员卡管理', 102 union all
- select 119 ,N'资金管理', 102 union all
- select 120 ,N'管理员管理', 102 union all
- select 121 ,N'添加管理员', 120 union all
- select 122 ,N'修改管理员', 120
- go
- SELECT * FROM tb
- --查所有子结点
- if object_id('f_getC') is not null drop function f_getC
- go
- create function f_getC(@id int)
- returns @re table(id int,level int,sort varchar(10))
- as
- begin
- declare @l int
- set @l=0
- insert @re select @id,@l,null
- while @@rowcount>0
- begin
- set @l=@l+1
- insert @re
- select a.modeid,@l,ltrim(isnull(b.sort,a.modeid))
- from tb as a,@re as b
- where b.id=a.parentid and b.level=@l-1
- END
- -- update @re set level = level -1
- return
- end
- go
- select a.modeid,a.parentid,REPLICATE(' ',b.level) +'┝'+a.modename,b.level,b.sort from tb a,f_getC(100) b
- where a.modeid=b.id
- order by b.sort,b.LEVEL,case when b.level<2 then 0 else 1 end
- /*
- modeid parentid sort level
- ----------- ----------- -------------------------------------------------- ---------- -----------
- 100 0 ┝商品管理 100 0
- 107 100 ┝商品管理 100 1
- 108 100 ┝明细管理 100 1
- 109 100 ┝物流管理 100 1
- 101 0 ┝定单管理 101 0
- 102 0 ┝用户管理 102 0
- 117 102 ┝会员管理 102 1
- 118 102 ┝会员卡管理 102 1
- 119 102 ┝资金管理 102 1
- 120 102 ┝管理员管理 102 1
- 104 0 ┝学院广告 104 0
- 105 0 ┝系统设置 105 0
- 106 0 ┝附件管理 106 0
- 110 107 ┝商品信息管理 100 2
- 111 107 ┝商品分类管理 100 2
- 112 107 ┝回收站管理 100 2
- 114 108 ┝团购管理 100 2
- 115 108 ┝拍卖管理 100 2
- 116 108 ┝优惠管理 100 2
- 121 120 ┝添加管理员 102 2
- 122 120 ┝修改管理员 102 2
- (所影响的行数为 21 行)
- */
- --查所有子结点,带路径与排序
- if object_id('f_getC') is not null drop function f_getC
- go
- create function f_getC(@id int)
- returns @re table(id int,level int,sort varchar(100),path varchar(500))
- as
- begin
- declare @l int
- set @l=0
- insert @re
- select [modeid],@l,right(''+ltrim(modeid),5),modename
- from tb where parentid=@id
- while @@rowcount>0
- begin
- set @l=@l+1
- insert @re
- select a.modeid,@l,b.sort+right(''+ltrim(a.modeid),5),
- b.path+' - '+a.modename
- from tb as a,@re as b
- where b.id=a.parentid and b.level=@l-1
- end
- update @re set level = level
- return
- end
- go
- select a.modeid,a.parentid,REPLICATE(' ',b.level) +'┝'+a.modename,b.level,b.sort ,b.path from tb a,f_getC(0) b
- where a.modeid=b.id
- order by sort
- /*
- modeid parentid level
- ----------- ----------- -------------------- ----------- -------------------- ----------------------------------------
- 100 0 ┝商品管理 0 00100 商品管理
- 107 100 ┝商品管理 1 0010000107 商品管理 - 商品管理
- 110 107 ┝商品信息管理 2 001000010700110 商品管理 - 商品管理 - 商品信息管理
- 111 107 ┝商品分类管理 2 001000010700111 商品管理 - 商品管理 - 商品分类管理
- 112 107 ┝回收站管理 2 001000010700112 商品管理 - 商品管理 - 回收站管理
- 108 100 ┝明细管理 1 0010000108 商品管理 - 明细管理
- 114 108 ┝团购管理 2 001000010800114 商品管理 - 明细管理 - 团购管理
- 115 108 ┝拍卖管理 2 001000010800115 商品管理 - 明细管理 - 拍卖管理
- 116 108 ┝优惠管理 2 001000010800116 商品管理 - 明细管理 - 优惠管理
- 109 100 ┝物流管理 1 0010000109 商品管理 - 物流管理
- 101 0 ┝定单管理 0 00101 定单管理
- 102 0 ┝用户管理 0 00102 用户管理
- 117 102 ┝会员管理 1 0010200117 用户管理 - 会员管理
- 118 102 ┝会员卡管理 1 0010200118 用户管理 - 会员卡管理
- 119 102 ┝资金管理 1 0010200119 用户管理 - 资金管理
- 120 102 ┝管理员管理 1 0010200120 用户管理 - 管理员管理
- 121 120 ┝添加管理员 2 001020012000121 用户管理 - 管理员管理 - 添加管理员
- 122 120 ┝修改管理员 2 001020012000122 用户管理 - 管理员管理 - 修改管理员
- 104 0 ┝学院广告 0 00104 学院广告
- 105 0 ┝系统设置 0 00105 系统设置
- 106 0 ┝附件管理 0 00106 附件管理
- (21 行受影响)
- */
- --------
sql 泡沫 或者 递归查询的更多相关文章
- SQL Server CTE 递归查询全解
在TSQL脚本中,也能实现递归查询,SQL Server提供CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询,本文详细介绍CTE递归调用的特性和使用示例 ...
- SQL Server CTE 递归查询全解 -- 转 学习
在TSQL脚本中,也能实现递归查询,SQL Server提供CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询,本文详细介绍CTE递归调用的特性和使用示例 ...
- SQL Server CTE 递归查询全解(转载)
在TSQL脚本中,也能实现递归查询,SQL Server提供CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询,本文详细介绍CTE递归调用的特性和使用示例 ...
- SQL Server 实现递归查询
基础数据/表结构 Sql 语句 ;With cte(id,pid,TName)As ( Select id,pid,TName Union All Select B.i ...
- T-SQL with as 的用法(转) SQL 下的递归查询 SQL2005(CTE) ,SQL2000(Function 递归)
摘自: http://blog.csdn.net/bluefoxev/article/details/6779794 ------- SQL2005 方法 一.WITH AS的含义 WITH ...
- sql实际应用-递归查询
1.既然要谈到sql,数据库表是必须的 2.数据结构 3.获取某个节点的所有子节点 传统的写法(sql2000) 很麻烦,暂且就不写了 来看看CTE的写法 CREATE PRO ...
- LINQ TO SQL 实现无限递归查询
from:http://blog.csdn.net/q107770540/article/list 见论坛内有网友提问类似的问题已经不止一次了, 现总结一下,希望能给以后再碰到此类问题的朋友一些帮助 ...
- SQL SERVER递归查询
SQL SERVER 进行递归查询 有如下数据表
- MS SQL Server递归查询
原文:MS SQL Server递归查询 刚才在论坛上看到网友一个要求.参考如下,Insus.NET分析一下,可以使用MS SQL Server的递归查询,得到结果.准备一张表: 根据网友提供的数据, ...
随机推荐
- [转]Valgrind简单用法
[转]Valgrind简单用法 http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html Valgrind的主要作者Julian S ...
- 触摸屏校准tslib的配置文件
./autogen.sh#sleep 10./configure --prefix=/usr/lxl/tslib --host=arm-linux CC=arm-linux-gcc#sleep 100 ...
- C++变量的存储类别与作用域
总结一下C++中变量的存储类别以及变量的作用域. (1)标示符的存储类别决定了标示符在内存中存在的时间(我们可以理解标示符就是确定一个变量的符号,也就是我们所说的变量名) 二:存储类别 (1)静态存储 ...
- P3383: [Usaco2004 Open]Cave Cows 4 洞穴里的牛之四
这个系列总算是做完了,这是我第一次高效率做完四道题,虽然中间有两道水题,但是第一和第四题还是蛮好的,但是只要能想到思路就很快能打完的. 像这道题,刚开始在想能不能用DP?但是苦于不知道怎么实施,后来又 ...
- [SSH服务]——一个SSH无密码登陆实验
实验拓扑图 实验描述 机房内有两台服务器: (1)B服务器10.0.10.158,充当Web服务器,有普通用户user_00 (2)C服务器10.0.10.191,充当Mysql服务器,有普通用户us ...
- 将SQLServer结果导出为excel文件
相信大家常常会遇到将SqlServer查询结果导出到Excel的问题.如果导出的次数少,直接“Save Results As...”就是了:但是当要分别在每个表取样,那就相当麻烦了.今天就为大家提供一 ...
- “我爱淘”冲刺阶段Scrum站立会议5
完成任务: 由于我们的思路做了些改变,重新设计了界面的布局. 计划任务: 实现数据库的链接,将页面布局完善. 遇到问题: 使用webservice对数据的提取
- 四则运算出题器(c++)
一.设计思路 这次版本加入了一下功能: 可定制题目的数量:修改循环次数: 可以定制每行打印的题目数和行间距的大小(当前题目序号可以整除定制数时输出输入的行间距个换行符): 可以定制算式的范围(修改随机 ...
- 不会JS中的OOP,你也太菜了吧!(第二篇)
一.你必须知道的 1> 原型及原型链在继承中起到了关键的作用.所以你一定要理解他们.2> 不会JS中的OOP,你也太菜了吧!(第一篇) 二.继承的6种方法 1> 原型链继承 原型链继 ...
- How to Build FFmpeg for Android
http://www.roman10.net/how-to-build-ffmpeg-for-android/ ffmpeg is an open-source platform for record ...