mssql 계층형 쿼리 질문드립니다. 0 3 1,564

by 씨스트 [SQLServer] [2018.04.20 11:17:41]


 메뉴리스트 뽑아올때
 접근가능한메뉴리스트요
 그때 1뎁스메뉴를 누르면
 최하위메뉴중 1번째 메뉴 url가지고오는거요
 2뎁스도 그렇고
 3뎁스도 4뎁스가 있으면 역시 가지고오는거
 한쿼리로 될까요??

by 마농 [2018.04.20 15:34:56]

예시 자료 주세요.


by 씨스트 [2018.04.20 18:30:44]

아래  DATA 의  1DETP 메뉴를 누르면  아래 계층으로 딸린 최하위메뉴중 첫번째메뉴 리스트를 뽑아주세요.

예시 > 시스템 관리 누르면 해당계층의  최하위 DEPT의 1번째인 공지게시판이 나오면됩니다. 

          이런식으로 다른 DEPT 들도 마찬가지로요...

LEVEL    메뉴명            메뉴코드            상위메뉴코드
1    AA센터 관리        0001                  00
1    BB센터 관리        0002                   00
1    CC통계               0003                   00
1    시스템 관리             0004                   00
2    게시판                000401              0004
3    공지게시판           00040101          000401
2    기준정보 관리       000402            0004
3    코드관리              00040201         000402
3    메뉴관리              00040202         000402
3    호환관리              00040203         000402
3    제조물관리            00040204        000402
3    ㅌㅌㅌ관리            00040205        000402
3    메일 발송관리        00040206        000402
3    선호도관리            00040207        000402
3    사용자관리            00040208        000402
3    권한관리               00040209        000402
3    카테고리관리         00040210        000402
3    메뉴별접속통계      00040211        000402
3    SM관리                00040212        000402


by 마농 [2018.04.24 09:13:28]

코드값이 위와 같이 상위코드값을 포함하는 구조라면?
다음과 같이 코드 정렬로 가능할 듯 합니다.
 

WITH t AS
(
SELECT 1 lv, '0001' cd, '00' pcd, 'AA센터 관리' nm
UNION ALL SELECT 1, '0002'    , '00'    , 'BB센터 관리'
UNION ALL SELECT 1, '0003'    , '00'    , 'CC통계'
UNION ALL SELECT 1, '0004'    , '00'    , '시스템 관리'
UNION ALL SELECT 2, '000401'  , '0004'  , '게시판'
UNION ALL SELECT 3, '00040101', '000401', '공지게시판'
UNION ALL SELECT 2, '000402'  , '0004'  , '기준정보 관리'
UNION ALL SELECT 3, '00040201', '000402', '코드관리'
UNION ALL SELECT 3, '00040202', '000402', '메뉴관리'
UNION ALL SELECT 3, '00040203', '000402', '호환관리'
UNION ALL SELECT 3, '00040204', '000402', '제조물관리'
UNION ALL SELECT 3, '00040205', '000402', 'ㅌㅌㅌ관리'
UNION ALL SELECT 3, '00040206', '000402', '메일 발송관리'
UNION ALL SELECT 3, '00040207', '000402', '선호도관리'
UNION ALL SELECT 3, '00040208', '000402', '사용자관리'
UNION ALL SELECT 3, '00040209', '000402', '권한관리'
UNION ALL SELECT 3, '00040210', '000402', '카테고리관리'
UNION ALL SELECT 3, '00040211', '000402', '메뉴별접속통계'
UNION ALL SELECT 3, '00040212', '000402', 'SM관리'
)
SELECT TOP(1) *
  FROM (SELECT lv, cd, pcd, nm
             , CASE WHEN LEAD(lv) OVER(ORDER BY cd) > lv
                    THEN 0 ELSE 1 END AS isleaf
          FROM t
         WHERE cd LIKE CONCAT('0004', '%')
        ) a
 WHERE isleaf = 1
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입