2017-12-14 28 views
2

모든 자식 노드를 부모 ID로 표시하는 방법을 예를 들어 설명해주십시오. 부모가 값이 "need" 인 브랜치만을 표시하면됩니다 (예제 이미지 참조).상위 요소의 하위 요소의 이름을 값으로 지정하는 방법은 무엇입니까? SQL 서버

+-----+----------+----------+ 
| id | parentid | selector | 
+-----+----------+----------+ 
| 1 |   |   | 
| 2 | 1  |   | 
| 3 | 1  | need  | 
| 4 | 2  |   | 
| 5 | 2  | need  | 
| 6 | 3  |   | 
| 7 | 5  |   | 
| 8 | 5  |   | 
| 9 | 6  |   | 
+-----+----------+----------+ 

데이터가 필요 :

+-----+----------+----------+----------------+ 
| id | parentid | selector | parentSelector | 
+-----+----------+----------+----------------+ 
| 1 | null  |   | null   | 
| 2 | 1  |   | null   | 
| 3 | 1  | need  | 3    | 
| 4 | 2  |   | null   | 
| 5 | 2  | need  | 5    | 
| 6 | 3  |   | 3    | 
| 7 | 5  |   | 5    | 
| 8 | 5  |   | 5    | 
| 9 | 6  |   | 3    | 
+-----+----------+----------+----------------+ 
작업이

만들기 위해 재귀 쿼리를 사용하면,

초기 데이터가 ... 특정 부모의 모든 아이들의 이름을 바꿀 수 없습니다 부모가 값이 "need" 인 요소에 의한 그룹화. 내 생각에 위 표의 예와 같이 표시가있는 열을 만들어야합니까? 아니면 다른 옵션이 있습니까? 조건과 parentSelector를 만들기 위해, 당신이 원하는 것을 내가 생각됩니다

내가 그것을 SQL 서버 2012에서 작업하는 경우 내가 아는하지 말자 SQL Server 2012

Example

답변

1

를 사용하지만, 난이 microsoft을 발견, I CASE (Transact-SQL)를 사용하십시오. stackoverflow question

+0

문제는 내가 문제를 이해하면 노드 (9)의 계층 적 선택으로, 우리는 우리가 ... –

+0

을이를 추적 할 수 없습니다 노드 3에 대한 및 사례를 통해 알 수 없다는 것입니다 :

은 또 다른 예이다 , [stackoverflow join] (https://stackoverflow.com/questions/29795400/loop-join-in-sql-server-2008)과 같이 루프 조인이 필요합니다. 이렇게하면 원하는 것을 허용 할 수 있지만 테이블이 더 크면 서버가 느려질 수 있습니다. –

+0

이 예제보다 구조 (실제 트리)가 더 크기 때문에 좋은 해결책이라고 생각하지 않습니다. 하지만 도움을 주셔서 감사합니다, 나는이 방법을 알게 될 것입니다. –