첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ CTE 재귀 호출 사용하기

----------------------------------------------------------------------------------------------------

CREATE TABLE MENU

(

    ID        INT

   ,PARENT_ID INT

   ,NAME      VARCHAR(50)

);

 

INSERT INTO MENU VALUES (1, 0, '메뉴');

INSERT INTO MENU VALUES (2, 0, '메뉴');

INSERT INTO MENU VALUES (3, 1, '메뉴');

INSERT INTO MENU VALUES (4, 1, '메뉴');

INSERT INTO MENU VALUES (5, 1, '메뉴');

INSERT INTO MENU VALUES (6, 5, '메뉴');

INSERT INTO MENU VALUES (7, 2, '메뉴');

INSERT INTO MENU VALUES (8, 2, '메뉴');

 

WITH CTE(ID, PARENT_ID, NAME, DISPLAY_ORDER, TREE_PATH)

AS

(

    SELECT

        ID

       ,PARENT_ID

       ,NAME

       ,CONVERT(VARCHAR(4000), ID  ) AS DISPLAY_ORDER

       ,CONVERT(VARCHAR(4000), NAME) AS TREE_PATH

    FROM MENU

    WHERE PARENT_ID = 0

    UNION ALL

    SELECT

        A.ID

       ,A.PARENT_ID

       ,A.NAME

       ,CONVERT(VARCHAR(4000), B.DISPLAY_ORDER + ' > ' + CONVERT(VARCHAR(4000), A.ID)) AS DISPLAY_ORDER

       ,CONVERT(VARCHAR(4000), B.TREE_PATH     + ' > ' + A.NAME                      ) AS TREE_PATH

    FROM  MENU AS A, CTE AS B

    WHERE A.PARENT_ID = B.ID

)

SELECT

    NAME

   ,TREE_PATH

FROM CTE

ORDER BY DISPLAY_ORDER;

----------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요