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