在论坛中出现的比较难的sql问题:8(递归问题 树形结构分组)
原文:在论坛中出现的比较难的sql问题:8(递归问题 树形结构分组)
所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。
sql2008 树形结构分组
http://bbs.csdn.net/topics/390634930
ID DeprtID DeprtName
1 0 1
2 1 2
3 1 3
4 2 4
5 3 5
6 4 6
7 5 7
分组后效果
ID DeprtID DeprtName
1 0 1
2 1 2
4 2 4
6 4 6
3 1 3
5 3 5
7 5 7
我的解法:
-
--drop table tb
-
-
create table tb(ID int, DeprtID int, DeprtName varchar(10))
-
-
insert into tb
-
select 1, 0, '1'
-
union all select 2 , 1 , '2'
-
union all select 3 , 1 , '3'
-
union all select 4 , 2 , '4'
-
union all select 5 , 3 , '5'
-
union all select 6 , 4 , '6'
-
union all select 7 , 5, '7'
-
go
-
-
-
;with t
-
as
-
(
-
select id,DeprtID,DeprtName,1 as level,
-
cast(right('000'+cast(id as varchar),3) as varchar(max)) as sort
-
from tb
-
where DeprtID =0
-
-
union all
-
-
select tb.id,tb.DeprtID,tb.DeprtName,level + 1 ,
-
cast(sort+right('000'+cast(tb.id as varchar),3) as varchar(max))
-
from t
-
inner join tb
-
on t.id = tb.DeprtID
-
)
-
-
select id,deprtid,deprtname
-
from t
-
order by sort
-
/*
-
id deprtid deprtname
-
1 0 1
-
2 1 2
-
4 2 4
-
6 4 6
-
3 1 3
-
5 3 5
-
7 5 7
-
*/
这里还有个例子,就是递归查询后,按照树形来排序:
-
drop table tb
-
-
create table tb
-
(
-
id int,
-
pid int,
-
name varchar(20)
-
)
-
-
insert into tb
-
select 1,null,'x'
-
union all select 2,1,'a'
-
union all select 3,1,'b'
-
union all select 4,2,'aa'
-
union all select 5,3,'bb'
-
go
-
-
-
;with t
-
as
-
(
-
select id,pid,name,1 as level,
-
cast(right('000'+cast(id as varchar),3) as varchar(max)) as sort
-
from tb
-
where pid is null
-
-
union all
-
-
select tb.id,tb.pid,tb.name,level + 1 ,
-
cast(sort+right('000'+cast(tb.id as varchar),3) as varchar(max))
-
from t
-
inner join tb
-
on t.id = tb.pid
-
)
-
-
select *
-
from t
-
order by sort
-
/*
-
id pid name level sort
-
1 NULL x 1 001
-
2 1 a 2 001002
-
4 2 aa 3 001002004
-
3 1 b 2 001003
-
5 3 bb 3 001003005
-
*/
在论坛中出现的比较难的sql问题:8(递归问题 树形结构分组)的更多相关文章
- 在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题)
原文:在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...
- 在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时、分钟计算问题)
原文:在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时.分钟计算问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. ...
- 在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据)
原文:在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决 ...
- 在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列)
原文:在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字)
原文:在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存)
原文:在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...
- 在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题)
原文:在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉 ...
- 在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题)
原文:在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得 ...
- 在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名)
原文:在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串)
原文:在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
随机推荐
- [webpack]手写一个mvp版本的webpack
let fs = require('fs'); let path = require('path'); let babylon = require('babylon'); // Babylon 把源码 ...
- osg模型部分节点旋转
osg::ref_ptr<osg::Geode> CreateBox() { osg::ref_ptr<osg::Geode> geode = new osg::Geode; ...
- 怎样创建一个OpenStack官方账号?
OpenStack官方账号分两种: 社区成员 (Community Member) 基金会成员 (Foundation Member) 基金会成员比社区成员的权利多一点: 允许提交峰会议题 允许对峰会 ...
- 123457123456---com.threeObj3.BabyShizi02--- 宝宝识字02
com.threeObj3.BabyShizi02--- 宝宝识字02
- 学习 TTreeView [16] - 给 TTreeView 添加复选框 (回复 "丁永其" 的问题)
问题来源: http://www.cnblogs.com/del/archive/2008/05/15/1114450.html#1199402 本例效果图: unit Unit1; interfac ...
- python使用退格键时出现^H解决方法
Linux 使用退格键时出现^H解决方法 1.临时解决 按ctrl 2.永久解决 基本现象 进入 Python shell,按下 Delete/Backspace 键: Python 3.5.2 (d ...
- 【Leetcode_easy】697. Degree of an Array
problem 697. Degree of an Array 题意:首先是原数组的度,其次是和原数组具有相同的度的最短子数组.那么最短子数组就相当于子数组的首末数字都是统计度的数字. solutio ...
- TEC-2机微程序设计
了解TEC-2机的结构和基本的指令知识很重要,不理解而只知一味地照抄是学不到知识的.建议先阅读课件,再结合例子进行理解.以下例子只供参考,有些地方可以合并,具体的操作仍需见仁见智.理解并学会使用微指令 ...
- 【数据库开发】如何创建MySQL数据库连接池(一个基于libmysql的MySQL数据库连接池示例(C/C++版))
http://blog.csdn.net/horace20/article/details/8087557 1. 一般架构说明 图 1 架构层次图 一般应用系统数据库访问模块可大致分为两层,一层 ...
- python 字符串 - python基础入门(12)
在 python变量 文章中我们对python变量做了一个简单的了解,整数/浮点数/bool值相对来讲都比较简单,今天详细在讲解一下关于字符串的内容,字符串俗称:str. 在本文会大量的使用print ...
