2017-11-08 17 views
0

値:グループに私が欲しいSQLグループ2行は、私は、次の表を持って

Row ID Name Parent 
1 c1 John p1 
2 c2 Dave p2 
3 p1 Lex p3 

例えばIDと親列で示さ子と親の関係を持って一緒に行

クエリは

Row ID Name Parent 
1 c1 John p1 
3 p1 Lex p3 
2 c2 Dave p2 

に追加の列を追加することなく、これを実現する方法上の任意のアドバイスを返す必要がありますか?

+1

ようである出力を並べ替えることができますあなたは本当に自分の子供_below_両親を表示しますか? –

+0

謝罪忘れてしまいました、MS SQL Server – p0enkie

+0

'p3'は定義されていません。どのように階層が深いかをどのように知っていますか? –

答えて

3

あなたはSQL Server上で作業しているので、私は階層または親子関係は、CTE式内で構築されてい

/* 
create table hierarchy_data 
(
Row int, 
ID varchar(2), 
Name varchar(20), 
Parent varchar(2) 
) 
insert into hierarchy_data select 1 ,'c1', 'John', 'p1' 
insert into hierarchy_data select 2 ,'c2' ,'Dave' ,'p2' 
insert into hierarchy_data select 3 ,'p1' ,'Lex' ,'p3' 
*/ 
;with cte as (
    select 
     row, 
     id, 
     name, 
     parent, 
     row_number() over (order by id) as groupno, 
     1 as level 
    from hierarchy_data 
    where parent not in (
     select id from hierarchy_data 
    ) 

    union all 

    select 
     h.row, 
     h.id, 
     h.name, 
     h.parent, 
     cte.groupno, 
     cte.level + 1 
    from cte 
    inner join hierarchy_data h 
     on cte.id = h.parent 

) 
select * 
from cte 
order by groupno, level 

以下のコードを共有して、あなたはrecursive CTE SQL queryを使用するオプションがあります。 ORDER BY句を使用することにより、あなたは

を望むように出力が

enter image description here

関連する問題