안녕하세요.. MSSQL(2012)은 처음 사용해보는데 해결이 잘 안되서 전문가 분들께 질문좀 드립니다..ㅠㅠ
화면에서 메뉴 관리를 하려고 합니다. 메뉴 중간에 다른 메뉴가 생겨 들어올수도 있기 때문에 정렬값을 두려고 합니다.
그런데 정렬을 어떻게 해야 할지 모르겠습니다.
아래는 관련 내용입니다.
CREATE TABLE TB_MENU
(
MENU_ID int NOT NULL PRIMARY KEY,
UPPER_MENU_ID int NOT NULL ,
MENU_NM varchar(50) NOT NULL,
SORT_NO int NOT NULL
);
INSERT INTO TB_MENU(MENU_ID, UPPER_MENU_ID, MENU_NM, SORT_NO) VALUES(1, 0, '메뉴 1', 10);
INSERT INTO TB_MENU(MENU_ID, UPPER_MENU_ID, MENU_NM, SORT_NO) VALUES(2, 1, '메뉴 1-1', 99);
INSERT INTO TB_MENU(MENU_ID, UPPER_MENU_ID, MENU_NM, SORT_NO) VALUES(3, 1, '메뉴 1-2', 99);
INSERT INTO TB_MENU(MENU_ID, UPPER_MENU_ID, MENU_NM, SORT_NO) VALUES(4, 0, '메뉴 3', 99);
INSERT INTO TB_MENU(MENU_ID, UPPER_MENU_ID, MENU_NM, SORT_NO) VALUES(5, 4, '메뉴 3-2', 99);
INSERT INTO TB_MENU(MENU_ID, UPPER_MENU_ID, MENU_NM, SORT_NO) VALUES(6, 4, '메뉴 3-1', 70);
INSERT INTO TB_MENU(MENU_ID, UPPER_MENU_ID, MENU_NM, SORT_NO) VALUES(7, 0, '메뉴 2', 50);
[원하는 결과]
메뉴 1
메뉴 1-1
메뉴 1-2
메뉴 2
메뉴 3
메뉴 3-1
메뉴 3-2
검색 하여 아래와 같이 쿼리를 만들었는데 정렬에서 막힙니다.
WITH RECURSIVE_MENU(MENU_ID, UPPER_MENU_ID, MENU_NM, SORT_NO, LEVEL) AS (
SELECT MENU_ID
, UPPER_MENU_ID
, MENU_NM
, SORT_NO
, 1
FROM TB_MENU
WHERE UPPER_MENU_ID = 0
UNION ALL
SELECT A.MENU_ID
, A.UPPER_MENU_ID
, A.MENU_NM
, A.SORT_NO
, B.LEVEL + 1
FROM TB_MENU A, RECURSIVE_MENU B
WHERE A.UPPER_MENU_ID = B.MENU_ID
)
SELECT MENU_ID
, UPPER_MENU_ID
, MENU_NM
, SORT_NO
, LEVEL
FROM RECURSIVE_MENU
- 동일한 메뉴 레벨에서는 SORT_NO 가 1순위, SORT_NO가 같을 경우는 MENU_ID 등록 순(2순위)으로 나오게 하고 싶습니다.
도움 좀 부탁 드리겠습니다.ㅠㅠ
|