좌측에 보이는 것이 원본 테이블이고 우측이 원하는 결과물입니다.
메인메뉴가 A 가 나오고
메인이 A 인 서브가 나오고
그다음 메인B 가 나오고
메인이 B인 서브가 나오고
이런식의 정렬을 원해서요 ㅠ
메뉴 이름은 그냥 보기 좋게 A, B, C 로 한거라서 PARENT_MENU_NAME 이 정렬값은 될 수 없고,
메인메뉴의 IDX 와 서브메뉴의 ORDER INDEX 를 기준으로 해야하는데 쉽지 않네요
Comment 1
-
약은 중
2020.11.11 12:55
WITH ORGIN_DATA AS(SELECT 1 IDX,'A' MENU_NAME,NULL PARENT_IDX,1 ORDER_INDEX UNION ALLSELECT 2 IDX,'B' MENU_NAME,NULL PARENT_IDX,2 ORDER_INDEX UNION ALLSELECT 3 IDX,'C' MENU_NAME,NULL PARENT_IDX,3 ORDER_INDEX UNION ALLSELECT 4 IDX,'D' MENU_NAME,NULL PARENT_IDX,4 ORDER_INDEX UNION ALLSELECT 5 IDX,'E' MENU_NAME,NULL PARENT_IDX,5 ORDER_INDEX UNION ALLSELECT 6 IDX,'F' MENU_NAME,NULL PARENT_IDX,6 ORDER_INDEX UNION ALLSELECT 7 IDX,'G' MENU_NAME,NULL PARENT_IDX,7 ORDER_INDEX UNION ALLSELECT 8 IDX,'SUB1' MENU_NAME,1 PARENT_IDX,1 ORDER_INDEX UNION ALLSELECT 9 IDX,'SUB2' MENU_NAME,1 PARENT_IDX,2 ORDER_INDEX UNION ALLSELECT 10 IDX,'SUB3' MENU_NAME,1 PARENT_IDX,3 ORDER_INDEX UNION ALLSELECT 11 IDX,'SUB4' MENU_NAME,2 PARENT_IDX,1 ORDER_INDEX UNION ALLSELECT 12 IDX,'SUB5' MENU_NAME,2 PARENT_IDX,2 ORDER_INDEX UNION ALLSELECT 13 IDX,'SUB6' MENU_NAME,3 PARENT_IDX,1 ORDER_INDEX UNION ALLSELECT 14 IDX,'SUB7' MENU_NAME,4 PARENT_IDX,1 ORDER_INDEX UNION ALLSELECT 15 IDX,'SUB8' MENU_NAME,6 PARENT_IDX,1 ORDER_INDEX UNION ALLSELECT 16 IDX,'SUB9' MENU_NAME,6 PARENT_IDX,2 ORDER_INDEX )SELECT IDX,(SELECT ISNULL(MAX(MENU_NAME),A.MENU_NAME)FROM ORGIN_DATAWHERE IDX = A.PARENT_IDX) PARENT_MENU_NAME,MENU_NAME,PARENT_IDX,ORDER_INDEXFROM ORGIN_DATA AORDER BY CASE WHEN PARENT_IDX IS NULL THEN IDX ELSE PARENT_IDX END,PARENT_IDX,ORDER_INDEX;