原文:在论坛中出现的比较难的sql问题:8(递归问题 树形结构分组)


最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了。

所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。

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

我的解法:


  1. --drop table tb
  2. create table tb(ID int, DeprtID int, DeprtName varchar(10))
  3. insert into tb
  4. select 1, 0, '1'
  5. union all select 2 , 1 , '2'
  6. union all select 3 , 1 , '3'
  7. union all select 4 , 2 , '4'
  8. union all select 5 , 3 , '5'
  9. union all select 6 , 4 , '6'
  10. union all select 7 , 5, '7'
  11. go
  12. ;with t
  13. as
  14. (
  15. select id,DeprtID,DeprtName,1 as level,
  16. cast(right('000'+cast(id as varchar),3) as varchar(max)) as sort
  17. from tb
  18. where DeprtID =0
  19. union all
  20. select tb.id,tb.DeprtID,tb.DeprtName,level + 1 ,
  21. cast(sort+right('000'+cast(tb.id as varchar),3) as varchar(max))
  22. from t
  23. inner join tb
  24. on t.id = tb.DeprtID
  25. )
  26. select id,deprtid,deprtname
  27. from t
  28. order by sort
  29. /*
  30. id deprtid deprtname
  31. 1 0 1
  32. 2 1 2
  33. 4 2 4
  34. 6 4 6
  35. 3 1 3
  36. 5 3 5
  37. 7 5 7
  38. */

这里还有个例子,就是递归查询后,按照树形来排序:


  1. drop table tb
  2. create table tb
  3. (
  4. id int,
  5. pid int,
  6. name varchar(20)
  7. )
  8. insert into tb
  9. select 1,null,'x'
  10. union all select 2,1,'a'
  11. union all select 3,1,'b'
  12. union all select 4,2,'aa'
  13. union all select 5,3,'bb'
  14. go
  15. ;with t
  16. as
  17. (
  18. select id,pid,name,1 as level,
  19. cast(right('000'+cast(id as varchar),3) as varchar(max)) as sort
  20. from tb
  21. where pid is null
  22. union all
  23. select tb.id,tb.pid,tb.name,level + 1 ,
  24. cast(sort+right('000'+cast(tb.id as varchar),3) as varchar(max))
  25. from t
  26. inner join tb
  27. on t.id = tb.pid
  28. )
  29. select *
  30. from t
  31. order by sort
  32. /*
  33. id pid name level sort
  34. 1 NULL x 1 001
  35. 2 1 a 2 001002
  36. 4 2 aa 3 001002004
  37. 3 1 b 2 001003
  38. 5 3 bb 3 001003005
  39. */
发布了416 篇原创文章 · 获赞 135 · 访问量 94万+

在论坛中出现的比较难的sql问题:8(递归问题 树形结构分组)的更多相关文章

  1. 在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题)

    原文:在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...

  2. 在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时、分钟计算问题)

    原文:在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时.分钟计算问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. ...

  3. 在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据)

    原文:在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决 ...

  4. 在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列)

    原文:在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  5. 在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字)

    原文:在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  6. 在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存)

    原文:在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...

  7. 在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题)

    原文:在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉 ...

  8. 在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题)

    原文:在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得 ...

  9. 在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名)

    原文:在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  10. 在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串)

    原文:在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

随机推荐

  1. Wamp 升级php7.3报错

    电脑系统:win10 Wamp版本: WampServer Version 3.0.4 32bit Apache 2.4.18 - PHP 7.3.7 - MySQL 5.7.11 PHP 5.6.1 ...

  2. python操作excel实用脚本

    import xlrd data = xlrd.open_workbook('/home/ppe/workspace/pythonwp/tianranqi_org.xls') table = data ...

  3. myadmin不需要路劲提权之法

    //觉得很典型的案例,就转载过来了.很多时候phpmyadmin都需要路劲才能写shell.否则拿到了myadmin也是无奈. 查看mysql版本 select version(); 版本是5.1 大 ...

  4. The pom for XXX is missing,no dependency information available

    笔者进行性能测试时,碰到如下问题 性能测试代码编写,调试通过之后.使用cmd进入项目根目录,意图打包导出项目中所有的依赖包,以便导入至jmeter工具中 cmd中使用命令:mvn dependency ...

  5. CNCF基金会的Certified Kubernetes Administrator认证考试计划

    关于CKA考试 CKA(Certified Kubernetes Administrator)是CNCF基金会(Cloud Native Computing Foundation)官方推出的Kuber ...

  6. Mysql备份工具mysqldump和mysqlhotcopy

    (1).Mysql备份类型 1)按照备份时对数据库的影响分为 Hot backup(热备):也叫在线备份.指在数据库运行中直接备份,对正在运行的数据库没有任何影响. Cold backup(冷备):也 ...

  7. PAT 甲级 1053 Path of Equal Weight (30 分)(dfs,vector内元素排序,有一小坑点)

    1053 Path of Equal Weight (30 分)   Given a non-empty tree with root R, and with weight W​i​​ assigne ...

  8. IntelliJ-svn配置与使用

    目录 IntelliJ-svn配置与使用 SVN的配置 版本控制主要操作按钮 版本控制相关的常用设置 Version Control窗口 @(目录) IntelliJ-svn配置与使用 SVN的配置 ...

  9. jQuery动态创建html元素的常用方法汇总

    在使用jQuery进行WEB程序设计的时候非常有用.分享给大家供大家参考.具体方法如下: 一般来说,可以通过以下几种方式动态创建html元素: 1.使用jQuery创建元素的语法 2.把动态内容存放到 ...

  10. CommMonitor10.0.3串口过滤工具(serial port monitor)

    CommMonitor  串行端口监视精灵是用于RS232 / RS422 / RS485端口监控的专业强大的系统实用程序软件.CommMonitor监视显示,记录和分析系统中的所有串行端口活动.这是 ...