• SQL Server 2008中的CTE递归查询得到一棵树


    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

  • 相关阅读:
    Android真机测试、乐视手机启用开发者模式
    HTML5 Geolocation API地理定位整理(二)
    HTML5 Geolocation API地理定位整理(一)
    HTML5 Geolocation API工作原理[转载]
    HTML5 filesystem: 网址
    RequireJS API
    Grunt 之 watch 和 livereload
    Grunt 之通配符
    前端开发 Grunt 之 Connect
    创建 Web 前端开发环境
  • 原文地址:https://www.cnblogs.com/guohu/p/9700872.html
Copyright © 2020-2023  润新知