2017-10-18 148 views
0

我有需要,形成树形结构的层次结构如下4个的结果集:如何排列在树形结构的层次结构设置SQL结果

结果集:

  1. 学院
  2. HeadOfDepartment
  3. 老师
  4. 学生

现在的层次结构应如下:

College1 
    HeadOfDepartment1 
     Teacher1 
      Student1 
      Student2 
     Teacher2 
      Student3 
    HeadOfDepartment2 
     Teacher3 
      Student4 
      Student5 
     Teacher4 
      Student6 
College2 
............ 

什么是可行的解决方案,形成这个层次?
我已经试过row_number() over对应的组进行排序。
示例数据

ObjectID Stream  Category University Percentage Subject 
College1 Engineering    University1  
College2 Medical     University2 
        ObjectID  Stream  Category University Percentage Subject 
Belongs to College1 HOD1  Management   
Belongs to College1 HOD2  Technical   

       ObjectID Stream Category University Percentage Subject 
Belongs to HOD1 Teacher1            SQL 
Belongs to HOD2 Teacher2            Java 

        ObjectID Stream Category University Percentage Subject 
Belongs to Teacher1 Student1           90 SQL 
Belongs to Teacher2 Student2           80 Hibernate 

所需的输出:

ObjectID Stream  Category  University Percentage Subject 
College1 Engineering    University1  
HOD1  Management    
Teacher1              SQL 
Student1           90   SQL 
HOD2  Technical  
Teacher2              Java 
Student2           80   Hibernate 
College2 Medical     University2  
+0

我认为SQL永远不会给你层次结果。那么表格格式的预期输出是什么。 –

+0

是表格格式! – Swetha

+0

添加了样本数据和期望的输出。不能格式化结果集:( – Swetha

回答

0

使用union all的一种方式是:

;with combination as (
    -- Colleges 
    select cast(id as char(5)) id, 
     [name] 
    from College 
    union all 
    -- HeadOfDepartments 
    select cast(CollegeId as char(5)) + cast(id as char(5)) 
     , ' ' + [name] 
    from HeadOfDepartment 
    union all 
    -- Teachers 
    select cast(h.CollegeId as char(5)) + cast(h.id as char(5)) + cast(t.id as char(5)) 
     , '  ' + t.[name] 
    from Teacher t 
    join HeadOfDepartment h 
     on t.HeadOfDepartmentId = h.id 
    union all 
    -- Students 
    select cast(h.CollegeId as char(5)) + cast(h.id as char(5)) + cast(t.id as char(5)) + cast(s.id as char(5)) 
     , '   ' + s.[name] 
    from Student s 
    join Teacher t 
     on s.TeacherId = t.id 
    join HeadOfDepartment h 
     on t.HeadOfDepartmentId = h.id 
) 
select [name] 
from combination 
order by id; 

SQL Fiddle Demo

+0

谢谢!在这里我正在寻找多套... – Swetha