zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    linux下对/sys/class/gpio中的gpio的控制
    -bash: ./reset_lgw.sh: /bin/sh^M: bad interpreter: No such file or directory
    MakeFile杂记
    MakeFile = := ?= += 的区别
    Linux 系统及编程相关知识总汇
    node-webkit开发桌面应用
    PHP 合理配置实现文件上传及保存文件到数据库
    PHP 从基础开始 ——重要知识点笔记
    Linux与Windows远程互访(使用Rdesktop与SSH)
    编程之路,开发之路,技术大全
  • 原文地址:https://www.cnblogs.com/guohu/p/9700872.html
Copyright © 2011-2022 走看看