메뉴코드로 대중소분류하는 쿼리문... 0 1 2,510

by 손님 대분류 중분류 소분류 대중소분류 메뉴 menu [2010.12.07 08:35:24]


question.jpg (43,817Bytes)

첨부한 question 그림처럼 만들고 싶습니다. 쿼리문 부탁드립니다~^^
by 봉 [2010.12.08 15:04:57]
약간 억지성으로 작성해봤습니다.. 수정이 필요할거 같긴 한데 초보라...

WITH TMP AS(
SELECT 'AA10' AS MENUCODE, '수주지원' AS MENUNAME FROM DUAL UNION ALL
SELECT 'AA1005', '설계(관리)' FROM DUAL UNION ALL
SELECT 'AA1010', 'VE' FROM DUAL UNION ALL
SELECT 'AA1025', 'BIM' FROM DUAL UNION ALL
SELECT 'AA102505', 'MODELING' FROM DUAL
)
SELECT AA
, BB
, MAX(CC)
FROM (
SELECT CASE
WHEN LEVEL = 1 THEN MENUNAME
ELSE REGEXP_SUBSTR(SYS_CONNECT_BY_PATH( MENUNAME, '|' ), '[^|]*', 1, 2)
END AS AA,
CASE
WHEN LEVEL = 1 THEN REGEXP_SUBSTR(SYS_CONNECT_BY_PATH( MENUNAME, '|' ), '[^|]*', 1, LEVEL+1)
WHEN LEVEL = 2 THEN MENUNAME
WHEN LEVEL = 3 THEN REGEXP_SUBSTR(SYS_CONNECT_BY_PATH( MENUNAME, '|' ), '[^|]*', 1, LEVEL+1)
END AS BB,
CASE
WHEN LEVEL = 1 THEN REGEXP_SUBSTR(SYS_CONNECT_BY_PATH( MENUNAME, '|' ), '[^|]*', 1, LEVEL)
WHEN LEVEL = 2 THEN REGEXP_SUBSTR(SYS_CONNECT_BY_PATH( MENUNAME, '|' ), '[^|]*', 1, LEVEL+2)
WHEN LEVEL = 3 THEN MENUNAME
END AS CC
FROM (SELECT MENUCODE
, MENUNAME
, CASE
WHEN LENGTH(MENUCODE) > 4 THEN SUBSTR(MENUCODE,1,LENGTH(MENUCODE)-2)
ELSE ''
END AS UP_MENUCODE
FROM TMP) A
WHERE LEVEL >= 2
START WITH MENUCODE = 'AA10'
CONNECT BY PRIOR MENUCODE = UP_MENUCODE
) GROUP BY AA,BB
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입