0

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

         编码名称 RoleID ImmediateSupervisor       
            21441 达姆 1 20479         
            20479 斯里兰卡 2 21567         
            21567 公羊 3 21111         
            21111 阿南德 4 21134         
            21134 拉古 5 无效          
            20182 分部 4 21134         
            21465 迪帕克 4 21134         
            21131 阿杰 3 21465         
            31234 卡利安 1 21131         
            21141 赫曼思 1 20479         
            25478 马赫什 1 21567         
            45698 拉克斯曼 1 20182         
                                                            

我想以分层方式在水平方向显示结果,如下所示:-

角色 ID-> 5 4 3 2 1
    拉古·阿南德·拉姆·马赫什
    Raghu Anand Ram Sri Dharm
    拉古·阿南德·拉姆·斯里·赫曼斯
    拉古·苏布·拉克斯曼
    拉古·迪帕克·阿杰·卡利安


在 Result 中,它根据 RoleID 以水平方式显示层次结构信息。如果他们有任何跳过,那么 RoleID 列将是空白的。例如,您可以看到 Laxman(RoleID-1) 正在向 Subbu(RoleID-4) 报告。他们在 laxman 和 Subbu 之间没有其他用户,因此结果中的空白是他们的 For Column 3 和 2 列。

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

4

1 回答 1

0

您可以将查询编写为:

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

希望这可以帮助!!!

于 2013-10-17T09:27:12.660 回答