Sql 以水平方式显示来自CTE的层次结构信息

Sql 以水平方式显示来自CTE的层次结构信息,sql,sql-server-2008,Sql,Sql Server 2008,我用SQl编写了CTE,它返回如下所述的层次结构信息:- Ecode Name RoleID ImmediateSupervisor 21441 Dharm 1 20479 20479 Sri 2 21567 21567

我用SQl编写了CTE,它返回如下所述的层次结构信息:-

Ecode Name RoleID ImmediateSupervisor 21441 Dharm 1 20479 20479 Sri 2 21567 21567 Ram 3 21111 21111 Anand 4 21134 21134 Raghu 5 Null 20182 Subbu 4 21134 21465 Deepak 4 21134 21131 Ajay 3 21465 31234 Kalyan 1 21131 21141 Hemanth 1 20479 25478 Mahesh 1 21567 45698 Laxman 1 20182 Ecode名称RoleID立即监督 21441达拉姆120479 20479斯里兰卡221567 21567随机存取存储器32111 21111 Anand 4 21134 21134 Raghu 5空 20182 Subbu 4 21134 21465迪帕克4 21134 21131 Ajay 3 21465 31234 Kalyan 121131 21141赫曼1 20479 25478 Mahesh 121567 45698拉克斯曼1 20182 我希望在水平方向上以分层方式显示结果,如下所示:-

RoleID-> 5 4 3 2 1 Raghu Anand Ram Mahesh Raghu Anand Ram Sri Dharm Raghu Anand Ram Sri Hemanth Raghu Subbu Laxman Raghu Deepak Ajay Kalyan RoleID->5 4 3 2 1 Raghu Anand Ram Mahesh Raghu Anand Ram Sri Dharm Raghu Anand Ram Sri Hemanth 拉古苏布拉克斯曼酒店 Raghu Deepak Ajay Kalyan 因此,它按照RoleID以水平方式显示层次结构信息。 如果有任何跳过,则RoleID列将为空。例如,您可以看到Laxman(RoleID-1)正在向Subbu(RoleID-4)报告。没有其他用户位于laxman和Subbu之间,因此结果中的空格是第3列和第2列的


请帮助我如何在SQl中实现这一点。

您可以将查询编写为:

select 
T1.Name as [1],
    case 2 
    when T2.RoleID then T2.Name  
    when T3.RoleID then T3.Name 
    when T4.RoleID then T4.Name 
    when T5.RoleID then T5.Name 
    else null end as [2] ,
    case 3 
    when T2.RoleID then T2.Name  
    when T3.RoleID then T3.Name 
    when T4.RoleID then T4.Name 
    when T5.RoleID then T5.Name 
    else null end as [3] ,
    case 4
    when T2.RoleID then T2.Name  
    when T3.RoleID then T3.Name 
    when T4.RoleID then T4.Name 
    when T5.RoleID then T5.Name 
    else null end as [4] ,
    case 5
    when T2.RoleID then T2.Name  
    when T3.RoleID then T3.Name 
    when T4.RoleID then T4.Name 
    when T5.RoleID then T5.Name 
    else null end as [5] 
from table1 T1
left join table1  T2 on T1.ImmediateSupervisor  = T2.Ecode 
left join table1  T3 on T2.ImmediateSupervisor  = T3.Ecode 
left join table1  T4 on T3.ImmediateSupervisor  = T4.Ecode 
left join table1  T5 on T4.ImmediateSupervisor  = T5.Ecode 
where T1.RoleID = 1
希望这有帮助