ROW_NUMBER() OVER()函数用法

with CTE as    
(     
-->Begin 一个定位点成员     
 select ID, Name,Parent,cast(Name as nvarchar(max)) as TE,  
        ROW_NUMBER()over(order by getdate()) as OrderID  
        --最关键是上面这个字段,要获取排序字段,按字符串来排序。  
        --其中窗口函数必须要使用order by,但是不能用整型,那就用时间吧  
        from Tree where Parent is null    
-->End      
union all     
-->Begin一个递归成员     
 select Tree.ID, Tree.Name,Tree.Parent,cast(replicate(' ',len(CTE.TE))+'|_'+Tree.name as nvarchar(MAX)) as TE,  
        CTE.OrderID*100+ROW_NUMBER()over(Order by GETDATE()) as OrderID  
        from Tree inner join CTE     
        on Tree.Parent=CTE.Name     
-->End     
)     
select * from CTE  
order by LTRIM(OrderID)--最后将这个整型数据转换为字符串型的进行排序  
  
--有时候整型可以比大小,字符串也可以,字符串比的大小是一位一位进行字符比较的  
--整型+字符串==整型,只有字符串+字符串==两个字符串的并和  
--递归查询中:第二条记录可以引用第一条记录的值  
--动态加载记录时,同一个等级的记录识别符:RowNumber()over(order by getdate())  
--延伸:可以动态获取某个部门下的所以子部门。也可以获取该部门上级的所以部门  
  
--总结:首先要拼凑出一个整型数据,然后转换为字符串,最后是进行字符串的order,而不是整型数据的order, 

  转载在:https://blog.csdn.net/goodyuedandan/article/details/70210791

SQL Server 2008中的CTE递归查询得到一棵树的更多相关文章

  1. SQL Server 2005中的CTE递归查询得到一棵树

    感觉这个CTE递归查询蛮好用的,先举个例子: use City; go create table Tree ( ID int identity(1,1) primary key not null, N ...

  2. SQLServer2005中的CTE递归查询得到一棵树

    最近研究了一下CTE递归查询,感觉这个CTE递归查询蛮好用的,在网上找到了一个比较好的例子,测试例子如下 use City; go create table Tree ( ID ,) primary ...

  3. SQL Server 2008中的数据压缩

    SQL Server 2008中引入了数据压缩的功能,允许在表.索引和分区中执行数据压缩.这样不仅可以大大节省磁盘的占用空间,还允许将更多数据页装入内存中,从而降低磁 盘IO,提升查询的性能.当然,凡 ...

  4. SQL Server 2008中新增的 1.变更数据捕获(CDC) 和 2.更改跟踪

    概述 1.变更数据捕获(CDC)        每一次的数据操作都会记录下来 2.更改跟踪       只会记录最新一条记录   以上两种的区别:         http://blog.csdn.n ...

  5. SQL Server 2008中新增的变更数据捕获(CDC)和更改跟踪

    来源:http://www.cnblogs.com/downmoon/archive/2012/04/10/2439462.html  本文主要介绍SQL Server中记录数据变更的四个方法:触发器 ...

  6. SQL Server 2008中增强的"汇总"技巧

    本文转载:http://www.cnblogs.com/downmoon/archive/2012/04/06/2433988.html SQL Server 2008中的Pivot和UnPivot: ...

  7. SQL Server 2008中数据压缩

    SQL Server 2008中引入了数据压缩的功能,允许在表.索引和分区中执行数据压缩.这样不仅可以大大节省磁盘的占用空间,还允许将更多数据页装入内存中,从而降低磁盘IO,提升查询的性能.当然,凡事 ...

  8. 利用Ring Buffer在SQL Server 2008中进行连接故障排除

    原文:利用Ring Buffer在SQL Server 2008中进行连接故障排除 出自:http://blogs.msdn.com/b/apgcdsd/archive/2011/11/21/ring ...

  9. SQL点滴15—在SQL Server 2008中调用C#程序

    原文:SQL点滴15-在SQL Server 2008中调用C#程序 T-SQL的在执行普通的查询的时候是很高效的,但是在执行循环,判断这样的语句的时候效率就不那么的高了.这时可以借助CLR了,我们可 ...

随机推荐

  1. How to Pronounce the 50 States

    How to Pronounce the 50 States (1/4) Share Tweet Share Tagged With: Places The US state names can be ...

  2. 删除oracle数据库用户

    手工删除ORACLE数据库用户时常会出现会话进程仍在使用导致删除失败的情况.需要查询会话并将会话删除才能成功将数据库用户删除,比较不方便. 适用场景 自动删除oracle数据库用户 基本知识 orac ...

  3. 最邻近算法(KNN)识别数字验证码

    应用场景   对于简单的数字型验证码的自动识别.前期已经完成的工作是通过切割将验证码图片切割成一个一个的单个数字的图片,并按照对应的数字表征类别进行分类(即哪些图片表示数字7,哪些表示8),将各种数字 ...

  4. delphi Drag and Drop sample 鼠标拖放操作实例

    Drag and Drop is a common operation that makes the interface user friendly: a user can drag/drop inf ...

  5. MyBatis对入参对象的属性空判断

      <!-- 查询学生list,like姓名 -->   <select id="getStudentListLikeName" parameterType=&q ...

  6. 动态修改属性设置 easyUI

    if(条件){  $("#area").combobox({ required:false }); }else{ $("#area").combobox({ r ...

  7. jenkins 自动触发

    在gitlab上配置连接jenkins ,将Jenkins的Secret token 与Build URL 复制到gitlab中 在settings标签下面,找到OutBound Request,勾选 ...

  8. 线程执行synchronized同步代码块时再次重入该锁过程中抛异常,是否会释放锁

    一个线程执行synchronized同步代码时,再次重入该锁过程中,如果抛出异常,会释放锁吗? 如果锁的计数器为1,抛出异常,会直接释放锁: 那如果锁的计数器为2,抛出异常,会直接释放锁吗? 来简单测 ...

  9. soap 简单调用其他系统的函数

    <?xml version ='1.0' encoding ='UTF-8' ?> <definitions name='自定义名称' targetNamespace='目标命名空间 ...

  10. 目前为止最全的微信小程序项目实例

    https://blog.csdn.net/zuoliangzhu/article/details/53862576#t1