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

  • 相关阅读:
    IDEA2019.1.2破解教程
    Java基础 -- 常见异常
    Java基础 -- Java基本类(部分)
    Java基础 -- IO流
    Java基础 -- Java方法
    Java数组
    IDEA首次配置问题
    Java开发环境搭建
    dos的几种打开方式和基本dos命令
    SpringBoot内外部配置文件加载和优先级
  • 原文地址:https://www.cnblogs.com/guohu/p/9700872.html
Copyright © 2011-2022 走看看