오라클에서 계층구조를 출력하는 방법으로
Start With...와 Connect by를 많이 사용합니다.
또 계층구조의 그룹으로 묶어서 출력하기 위해서,
ORDER SIBLINGS BY..를 사용합니다.
이 부분을 MS-SQL용으로 변환하는 sql입니다.
필요하시분 아래 샘플 긁어다 참조해서 쓰세요.
Oracle...
-----------------------------------------------------------------------------
SELECT FOLDER_ID
, NAME
, PARENT_ID
, ITEM_INDEX
, LEVEL
FROM FOLDERS
START WITH FOLDER_ID = #{value}
CONNECT BY PRIOR FOLDER_ID = PARENT_ID
ORDER SIBLINGS BY FTI.ITEM_INDEX
, FTI.NAME
-----------------------------------------------------------------------------
MS-SQL...
(1) 아래 SQL에서 WITH 절은 Start With...와 Connect by..을 대체하는 부분
(2) 아래 SQL에서 파란색 칠한 부분이 오라클에서 ORDER SIBLINGS BY...을 대체하는 부분
-----------------------------------------------------------------------------
WITH WH AS
(
SELECT
A.FOLDER_ID
, A.NAME
, A.PARENT_ID
, A.ITEM_INDEX
, CONVERT(NVARCHAR(1000), '/' + CONCAT(A.ITEM_INDEX, A.NAME) ) AS SORT
FROM FOLDERS A
WHERE A.FOLDER_ID = #{value}
UNION ALL
SELECT
B.FOLDER_ID
, B.NAME
, B.PARENT_ID
, B.ITEM_INDEX
, CONVERT(NVARCHAR(1000), WH.SORT + '/' + CONCAT(B.ITEM_INDEX, B.NAME) ) AS SORT
FROM FOLDERS B
, WH
WHERE B.FOLDER_ID = #{value}
AND WH.FOLDER_ID = B.PARENT_ID
)
SELECT WH.*
FROM WH
ORDER BY WH.SORT
-----------------------------------------------------------------------------