cte재귀쿼리를 이용해서 이중트리구조를 짜고싶습니다.


다음과 같은 테이블(employees) 있다고 가정


 id                 sidL           sidR


Nancy          Ina                 David
Ina RonDan
David JamesNULL
Ron AndrewJanet
Dan MargaretSteven
James MichaelNULL
Andrew RobertNULL
Janet NULLNULL
Margaret NULLNULL
Steven NULLNULL
Michael NULLNULL
Robert LauraAnn
Laura NULLNULL
Ann NULLNULL





id값(최초 Nancy)을 기준으로 sidL 왼쪽위치  sidR 오른쪽 위치합니다.


따라서 출력은


LVL0                                                                                  Nancy

LVL1                                              Ina ----------------------------------------------David

LVL2                        Ron---------------------- Dan                                     James------------------NULL

LVL3     Andrew-------------  Janet        Margaret--------- Steven         Michael--------NULL        NULL-------- NULL

LVL4

LVL5

.

위와같은 형식이되어야하는대요.




일단 왼쪽라인만 출력했을경우 


WITH EmpCTE(id, sidL, sidR, lvl)

AS

(

      -- Anchor Member(AM)

      SELECT id, sidL, sidR, 0

      FROM employees

      WHERE id = 'Nancy'


      UNION ALL


      -- Recursive Memeber(RM)

      SELECT E.id, E.sidL, E.sidR, M.lvl+1

      FROM employees AS E

      INNER JOIN EmpCTE AS M ON M.sidL = E.id 

)

SELECT * FROM EmpCTE


출력값



id             sidL         sidR        lvl

Nancy    Ina               David        0

Ina            Ron       Dan        1

Ron            Andrew       Janet        2

Andrew    Robert       NULL        3

Robert    Laura       Ann        4

Laura    NULL       NULL        5



LVL0                                                                                  Nancy

LVL1                                              Ina ----------------------------------------------David

LVL2                        Ron---------------------- Dan                                     

LVL3     Andrew-------------  Janet              

LVL4   Robert--------NULL

LVL5  Laura------Ann

.



위 출력값은 왼쪽기준으로만 출력했을때 정상출력이 됩니다.

하지만 왼쪽 오른쪽 모두 출력해야하는대....

어떻게 해야하는지 고수님들의 조언 부탁드립니다.











No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 13561
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 8380
7058 서버2012 설치에 큰 문제가 있습니다 도와주세요 [2] P.H 2013.08.02 5513
7057 킬럼에 A, B, C 형태로 문자열이 있고 이걸 in 인라인 쿼리로 조회가 가능할까요? [2] 백승희_291263 2013.08.02 4775
7056 이건 쿼리를 어떻게 잡아야 할까요? [2] 카루카루 2013.08.02 5026
7055 암호 변경 로그 정보 확인 방법 문의 [7] 껄껄껄 2013.08.02 5314
7054 row_num 관련 질문 드립니다. [2] 형님 2013.08.02 4489
7053 db 저장방식 질문입니다. [4] 거저먹네 2013.08.02 5339
7052 시스템 카탈로그 임의 수정이 안되네요.. [2] Larry 2013.08.01 4208
7051 웹사이트의 CharSet 설정과 Database의 Collation ... 그 외 상관 관계... Larry 2013.07.31 8404
7050 쿼리문 질문 [6] 황영식_314681 2013.07.30 4510
7049 선배님들 프로시저(락 관련) 조언좀 부탁드립니다... [3] alima 2013.07.30 6426
7048 xml 데이터형의 컬럼을 select 하는데.. [3] 강승생 2013.07.30 4622
7047 해외 서버에 웹사이트를 이전 시켰는데 DB에서 불러온 한글만 깨져요.. [12] Larry 2013.07.26 10582
7046 asp로 ms-sql 2005의 타이틀 컬럼 앞 10자리만 수정시... [2] 다크나인 2013.07.26 6330
7045 SQL DB를 활용하여 회사 프로그램을 작성해야하는데요 MFC 와 C# [2] 씨쎔 2013.07.26 4566
7044 테이블안에 중복 아이디에 순번을 먹이고 싶습니다... [1] dcman 2013.07.25 5036
» cte를 이용 이중트리구조를 출력하려합니다. [1] gtm100 2013.07.25 5172
7042 MsDtsSrvr.exe 오류가 나네요 곰팡이 2013.07.25 7902
7041 SqlServer 2012 인스탄스 제거 질문드립니다. [2] 힘내라장코치 2013.07.25 4987
7040 mssql 7 desktop 버젼 구할 방법이 없을까요 ? [1] 어둠별빛 2013.07.24 4506
7039 쿼리 수정 설명 부탁드립니다. [2] rx프로그래머rx 2013.07.24 4513





XE Login