2012-11-29 2 views
5

dönmek için özyinelemeli bir sorgu nasıl oluşturabilirim SQL Server 2008 kullanıyorum ve daha önce hiç rastlamadım bir SQL soruna sahip.Düzleştirilmiş, birleştirilmiş bir dize sütun

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 

Ben bu tabloyu sorgulamak ve hiyerarşiyi temsil edeceğini her satır için bir isim dönmek istiyorum:

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 

Sonuçları aradığım: hiyerarşik kategori listesini temsil aşağıdaki tabloyu düşünün Her ebeveynin ismini/çocuğunu çocuğa birleştirerek. Hiyerarşinin önceden ayarlanmış bir yuvalama derinliği yoktur ve bunu tek bir sorguda çalıştırabilmek isterim. Bu nasıl yapılabilir?

cevap

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

Kusursuz çalışıyor, teşekkürler! – shark92651