안녕하세요 쿼리 짜는 도중 잘 안되서 고수님들 도움 요청 드립니다.
SELECT 'A' AS CD, '' AS UP_CD, '기준관리' AS NM, 'Y' AS YN FROM DUAL
UNION ALL
SELECT 'A-1' AS CD, 'A' AS UP_CD, '은행관리' AS NM, 'Y' AS YN FROM DUAL
UNION ALL
SELECT 'A-2' AS CD, 'A' AS UP_CD, '계좌관리' AS NM, 'N' AS YN FROM DUAL
UNION ALL
SELECT 'B' AS CD, '' AS UP_CD, '기준관리' AS NM, 'Y' AS YN FROM DUAL
UNION ALL
SELECT 'B-1' AS CD, 'B' AS UP_CD, '은행관리' AS NM, 'Y' AS YN FROM DUAL
UNION ALL
SELECT 'B-1-1' AS CD, 'B-1' AS UP_CD, '계좌관리' AS NM, 'N' AS YN FROM DUAL
UNION ALL
SELECT 'C' AS CD, '' AS UP_CD, '기준관리' AS NM, 'Y' AS YN FROM DUAL
UNION ALL
SELECT 'C-1' AS CD, 'C' AS UP_CD, '은행관리' AS NM, 'N' AS YN FROM DUAL
UNION ALL
SELECT 'C-2' AS CD, 'C' AS UP_CD, '계좌관리' AS NM, 'N' AS YN FROM DUAL
예시 DATA는 위와 같으며, 조회시 아래와 같이 조회됩니다.
CD | UP_CD | NM | YN |
A | 기준관리 | Y | |
A-1 | A | 은행관리 | Y |
A-2 | A | 계좌관리 | N |
B | 기준관리 | Y | |
B-1 | B | 은행관리 | Y |
B-1-1 | B-1 | 계좌관리 | N |
C | 기준관리 | Y | |
C-1 | C | 은행관리 | N |
C-2 | C | 계좌관리 | N |
이렇게 조회되는것을 아래 처럼 YN 값이 N 인경우는 조회를 안하며, 상위 값에서 하위 값이 존재하지 않을때 같이 조회되지 않았으면 합니다.
CD | UP_CD | NM | YN |
A | 기준관리 | Y | |
A-1 | A | 은행관리 | Y |
위와 같이 조회가 되면 되는데 어렵네요 ㅜㅜ 도움 부탁 드립니다
WITH t AS ( SELECT 'A' cd, '' up_cd, '기준관리' nm, 'Y' yn FROM dual UNION ALL SELECT 'A-1' , 'A' , '은행관리', 'Y' FROM dual UNION ALL SELECT 'A-2' , 'A' , '계좌관리', 'N' FROM dual UNION ALL SELECT 'B' , '' , '기준관리', 'Y' FROM dual UNION ALL SELECT 'B-1' , 'B' , '은행관리', 'Y' FROM dual UNION ALL SELECT 'B-1-1', 'B-1', '계좌관리', 'N' FROM dual UNION ALL SELECT 'C' , '' , '기준관리', 'Y' FROM dual UNION ALL SELECT 'C-1' , 'C' , '은행관리', 'N' FROM dual UNION ALL SELECT 'C-2' , 'C' , '계좌관리', 'N' FROM dual UNION ALL SELECT 'D' , '' , '기준관리', 'Y' FROM dual UNION ALL SELECT 'D-1' , 'D' , '은행관리', 'N' FROM dual UNION ALL SELECT 'D-1-1', 'D-1', '계좌관리', 'Y' FROM dual ) SELECT cd, up_cd, nm, yn FROM t m WHERE yn = 'Y' AND EXISTS (SELECT 1 FROM t s WHERE CONNECT_BY_ISLEAF = 1 AND yn = 'Y' START WITH cd = m.cd CONNECT BY PRIOR cd = up_cd AND PRIOR yn = 'Y' ) START WITH up_cd IS NULL CONNECT BY PRIOR cd = up_cd AND PRIOR yn = 'Y' ;