with CTE as ( -->Begin 一个定位点成员 select [id],[orgname],[parentid],cast([orgname] as nvarchar(max)) as TE,ROW_NUMBER()over(order by getdate()) as OrderID --最关键是上面这个字段,要获取排序字段,按字符串来排序。 --其中窗口函数必须要使用order by,但是不能用整型,那就用时间吧 from [trs].[dbo].[SYS_ORG] where [parentid]='0' and isdelete='1' -->End union all -->Begin一个递归成员 select Tree.[id], Tree.[orgname],Tree.[parentid],cast(replicate(' ',len(CTE.TE))+'|_'+Tree.[orgname] as nvarchar(MAX)) as TE, CTE.OrderID*100+ROW_NUMBER()over(Order by GETDATE()) as OrderID from [trs].[dbo].[SYS_ORG] Tree inner join CTE on Tree.[parentid] = CTE.[id] -->End ) select * from CTE order by LTRIM(OrderID)--最后将这个整型数据转换为字符串型的进行排序 |
|
来自: nacy2012 > 《SqlServer》