2017-02-17 5 views
2

나는이 테이블이 있습니다삽입 새로운 콜 럼은

Id |Name  |ParentId 
    1 |John  |Null  
    2 |Oscar  |1   
    3 |Peter  |2   
    4 |Abbey  |3   
    5 |Adrian  |4   
    6 |Barbara  |5  

을하고 난 (나에게 listName을 할 수있는 parentId으로 함께 이전 이름을 가져옵니다 새 열을 줄 것이다 선별을 만들고 싶어 ParentID에 의한 주문).

이 예제의 최종 결과는 다음과 같다 : 모든 도움

Id |Name  |ParentId  | List 
    1 |John  |Null   | John 
    2 |Oscar  |1   | John-Oscar 
    3 |Peter  |2   | John-Oscar-Peter 
    4 |Abbey  |3   | John-Oscar-Peter-Abbey 
    5 |Adrian  |4   | John-Oscar-Peter-Abbey-Adrian 
    6 |Barbara  |5   | John-Oscar-Peter-Abbey-Adrian-Barbara 

Thnks!

+0

어떤 데이터베이스를 사용하고 있습니까? –

+0

플래그가 SQL Server x) –

+0

죄송합니다. 참여하는 데 익숙해졌습니다. –

답변

5

당신이 원하는 결과를 생산하기 위해 재귀 CTE를 사용할 수 있습니다에 CONCATENATE 컬럼과 동일합니다 :이 또한 물론, 여러 뿌리 작동

declare @t table (Id int, Name varchar(20), ParentId int) 
insert @t values 
( 1 ,'John'  ,Null ), 
( 2 ,'Oscar'  ,1  ), 
( 3 ,'Peter'  ,2  ), 
( 4 ,'Abbey'  ,3  ), 
( 5 ,'Adrian'  ,4  ), 
( 6 ,'Barbara'  ,5 ) 

;with x as (
    select *, cast(name as varchar(1000)) as list from @t where parentid is null 
    union all 
    select t.id, t.name, t.parentid, cast(x.list+'-'+t.name as varchar(1000)) from @t t join x on t.parentid = x.id 
) 
select * from x 

.

2

이 행

select id,name,pid, 
stuff((select '-'+name from yourtable n2 where n2.id<=n1.id for xml path('')),1,1,'') b 
from yourtable n1