2012-11-29 10 views
5

लौटने के लिए एक रिकर्सिव क्वेरी कैसे बना सकता हूं मैं SQL Server 2008 का उपयोग कर रहा हूं और एक SQL चुनौती है जिसे मैंने पहले कभी नहीं चलाया है।मैं एक flattened, concatenated स्ट्रिंग कॉलम

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 

मैं इस तालिका को क्वेरी और प्रत्येक पंक्ति है कि पदानुक्रम का प्रतिनिधित्व करते हैं के लिए एक नाम वापस जाने के लिए करना चाहते हैं:

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 

परिणाम मैं देख रहा हूँ: निम्न तालिका कि एक पदानुक्रमित श्रेणी सूची का प्रतिनिधित्व करता है पर विचार करें प्रत्येक माता-पिता के नाम को बच्चे को नाम से जोड़कर। पदानुक्रम में प्री-सेट घोंसले की गहराई नहीं है और मैं इसे एक ही क्वेरी में चलाने में सक्षम होना चाहता हूं। इसे किस तरह पूर्ण कर सकते है?

उत्तर

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

पूरी तरह से काम करता है, धन्यवाद! – shark92651

संबंधित मुद्दे