2017-10-18 18 views
0

J'ai 4 jeux de résultats qui doivent former la hiérarchie de structure arborescente comme suit:Comment aligner jeu de résultats SQL dans la hiérarchie de l'arborescence

ensembles de résultat:

  1. College
  2. HeadOfDepartment
  3. Enseignant
  4. Étudiant

Maintenant, la hiérarchie devrait être comme suit:

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

Quelle est la solution réalisable pour former cette hiérarchie? J'ai essayé row_number() over le groupe correspondant à trier.
des exemples de données

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 

sortie désiré:

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

Je pense que SQL ne peut jamais vous donner le résultat dans la hiérarchie. Alors, quelle est votre sortie attendue sous forme de tableau. –

+0

yup, dans un format tabulaire! – Swetha

+0

a ajouté des données d'échantillon et la sortie désirée.n'a pas pu formater le resultset :( – Swetha

Répondre

0

Un chemin avec l'utilisation union all est:

;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

Merci! Ici, je cherche plusieurs ensembles ... – Swetha