2009-10-22 4 views
2
id parent_id 
1 0 
2 0 
3 2 
4 0 
5 1 
6 0 

(PARENT_ID = 0) 자식 행 다음 :부모 자식 SQL 쿼리 내가 부모 행을 반환하는 쿼리를 필요

  1. 첫째 부모
  2. 첫째 부모
  3. 을 모든 아이들 제 부모
  4. 초 상위
  5. 번째 상위
  6. 제의 모든 자식 부모

예상 결과 : ID

id parent_id 
------------------------------------------- 
1 0 (first parent) 
5 1  (all children of first parent) 
2 0 second parent 
3 2  (all children of second parent) 
4 0 third parent 
6 0 fourth parent 

나는 모든 차일 다음에 부모의 조합을 사용할 수 있습니다하지만 그건 먼저 나에게 아이를 부모에게 제공하여 명령했다. 부모와 그 자녀가 즉시 필요합니다.

누구든지 도움을받을 수 있습니까?

+0

당신이 사용하고있는 데이터베이스? –

+0

SQL Server 2005을 사용 중입니다. – kheya

답변

0

.

 
CREATE TABLE #Parents 
(
RowId bigint identity(1,1), 
Id bigint 
)

CREATE TABLE #Results ( RowId bigint identity(1,1), Id bigint, ParentId bigint )

DECLARE @Count1 bigint DECLARE @Count2 bigint DECLARE @ParentId bigint

INSERT INTO #Parents SELECT Id FROM MyTable WHERE ParentId = 0 ORDER BY Id

SET @Count1 = 0 SELECT @Count2 = MAX(RowId) FROM #Parents

WHILE @Count1 < @Count2 BEGIN SET @Count1 = @Count1 +1 SELECT @ParentId = Id FROM #Parents WHERE RowId = @Count1 INSERT INTO #Results (Id, ParentId) VALUES (@Count1, 0) INSERT INTO #Results (Id, ParentId) SELECT ID, ParentId FROM MyTable WHERE ID = @Count1 ORDER BY Id END

SELECT Id, ParentId FROM #Results ORDER BY RowId

DROP TABLE #Results DROP TABLE #Parents

3

SQL Server 2005 이상을 사용하는 경우 재귀 CTE를 사용하여 끝에 주문할 수있는 필드를 유지 관리 할 수 ​​있습니다.

이 시도 :

이 두 개의 임시 테이블과 세 개의 변수를 사용하여 수행 할 수 있습니다
declare @t table (id int, parent_id int) 
insert @t 
select 1,0 
union all select 2,0 
union all select 3,2 
union all select 4,0 
union all select 5,1 
union all select 6,0 
; 

with tree as (
select t.*, convert(varbinary(max),t.id) as ordered 
from @t t 
where parent_id = 0 
union all 
select t.*, ordered + convert(varbinary(max),t.id) 
from tree base 
join 
@t t 
on t.parent_id = base.id 
) 
select * 
from tree 
order by ordered 
; 
+0

샘플 테이블에서 작동하지 않습니다. 위에서 지정한 결과를 예상 한 결과로 제공하는 쿼리를 작성할 수 있습니까? 감사합니다. – kheya

+0

CTE가 먼저 모든 부모 행을 제공한다는 의미입니다. 그럼 모든 아이들. 첫 번째 부모가 아닌 자녀, 두 번째 부모와 그 자녀가 뒤 따르는 경우 – kheya

+0

나는이 게시물과 그 코멘트를 표시하는 데 사용 된 결과를 정확하게 찾고 있습니다. 학부모 의견과 그 답장 (하위) 다음에 다른 의견 및 그 답변. 답글은 학부모 의견에있는 아동들입니다. – kheya