2012-11-29 9 views
5

Ich benutze SQL Server 2008 und habe eine SQL-Herausforderung, die ich noch nie zuvor erlebt habe. Betrachten Sie die folgende Tabelle, die eine hierarchische Kategorienliste darstellt:Wie erstelle ich eine rekursive Abfrage, um eine abgeflachte, verkettete String-Spalte zurückzugeben

ID Name   Description      ParentID 
--- --------------- ------------------------------- -------- 
1 Bicycle   Bicycles and Tricycles   {null} 
2 Wheels   Wheels       1 
3 Spoked   Spoked Wheels     2 
4 Skate Boards Skate Boards and accessories {null} 
5 Wheels   Skate Board Wheels    4 
6 Polyurethane Polyurethane Wheels    5 

Ergebnisse Ich suche:

ID Heirarchy        Description 
--- --------------------------------------- ------------------------------------ 
1 Bicycle         Bicycles and Tricycles 
2 Bicycle, Wheels       Wheels 
3 Bicycle, Wheels, Spoked     Spoked Wheels 
4 Skate Boards       Skate Boards and accessories 
5 Skate Boards, Wheels     Skate Board Wheels 
6 Skate Boards, Wheels, Polyurethane  Polyurethane Wheels 

Ich möchte diese Tabelle zur Abfrage und geben einen Namen für jede Zeile, die die Hierarchie darstellen würde durch Verketten des Namens (der Namen) jedes Elternteils mit dem Kind. Die Hierarchie hat keine voreingestellte Schachtelungstiefe und ich möchte diese in einer einzigen Abfrage ausführen können. Wie kann dies erreicht werden?

Antwort

3
with tree as (
    select id, 
      cast(name as varchar(max)) as hierarchy, 
      name, 
      description 
    from the_table 
    where parentID is null 
    union all 
    select c.id, 
      p.hierarchy + ', ' + c.name, 
      c.name, 
      c.description 
    from the_table c 
     join tree p on p.id = c.parentID 
) 
select * 
from tree; 
+0

Funktioniert perfekt, danke! – shark92651

Verwandte Themen